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