3e2c3d9
--- runtime/Clib/csocket.c.orig	2018-12-18 16:52:09.914524595 -0700
3e2c3d9
+++ runtime/Clib/csocket.c	2018-12-18 16:52:39.254438046 -0700
3e2c3d9
@@ -1703,8 +1703,8 @@ bgl_socket_localp( obj_t sock ) {
3e2c3d9
    if( SOCKET( sock ).stype == BGL_SOCKET_SERVER ) {
3e2c3d9
       return 0;
3e2c3d9
    } else {
3e2c3d9
-      struct sockaddr_in sin;
3e2c3d9
-      int len = sizeof( sin );
3e2c3d9
+      struct sockaddr_storage sstor;
3e2c3d9
+      int len = sizeof( sstor );
3e2c3d9
       
3e2c3d9
       if( getsockname( SOCKET( sock ).fd,
3e2c3d9
 		       (struct sockaddr *)&sin,
3e2c3d9
@@ -1718,12 +1718,14 @@ bgl_socket_localp( obj_t sock ) {
3e2c3d9
 	 socket_error( "socket-localp", buffer, sock );
3e2c3d9
       } else if( SOCKET( sock ).family == AF_INET ) {
3e2c3d9
 	 /* ipv4 addr */
3e2c3d9
-	 return sin.sin_addr.s_addr == SOCKET( sock ).address.in_addr.s_addr;
3e2c3d9
+	 struct sockaddr_in *sin = (struct sockaddr_in *)(void *)&ssto;;
3e2c3d9
+	 return sin->sin_addr.s_addr == SOCKET( sock ).address.in_addr.s_addr;
3e2c3d9
       } else {
3e2c3d9
 	 /* ipv6 addr */
3e2c3d9
 	 /* MS: 17nov2014 don't know how to implement this */
3e2c3d9
+	 struct sockaddr_in6 *sin = (struct sockaddr_in6 *)(void *)&ssto;;
3e2c3d9
 	 fprintf( stderr, "(%s:%d) IPV6 UNTESTED\n", __FILE__, __LINE__ );
3e2c3d9
-	 return memcmp( (char *)&(((struct sockaddr_in6 *)( &sin ))->sin6_addr),
3e2c3d9
+	 return memcmp( (char *)&(sin->sin6_addr),
3e2c3d9
 			(char *)&(SOCKET( sock ).address.in6_addr),
3e2c3d9
 			sizeof( (SOCKET( sock ).address.in6_addr) ) );
3e2c3d9
       }
3e2c3d9
@@ -2632,7 +2634,7 @@ bgl_make_datagram_server_socket( int por
3e2c3d9
    int s;
3e2c3d9
    struct addrinfo hints, *servinfo, *p;
3e2c3d9
    int rv;
3e2c3d9
-   char service[ 10 ];
3e2c3d9
+   char service[ 12 ];
3e2c3d9
    obj_t sock, buf, inb, iport;
3e2c3d9
    FILE *fs;
3e2c3d9