--- 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;