trawick 02/01/04 09:36:51 Modified: network_io/unix sockets.c Log: fix an IPv6 hole in apr_accept(); the bug prevented the proper sockaddr from being returned in some cases Revision Changes Path 1.91 +4 -2 apr/network_io/unix/sockets.c Index: sockets.c =================================================================== RCS file: /home/cvs/apr/network_io/unix/sockets.c,v retrieving revision 1.90 retrieving revision 1.91 diff -u -r1.90 -r1.91 --- sockets.c 26 Nov 2001 16:34:36 -0000 1.90 +++ sockets.c 4 Jan 2002 17:36:51 -0000 1.91 @@ -203,6 +203,7 @@ apr_status_t apr_accept(apr_socket_t **new, apr_socket_t *sock, apr_pool_t *connection_context) { + static char generic_inaddr_any[16] = {0}; /* big enough for IPv4 or IPv6 */ alloc_socket(new, connection_context); set_socket_vars(*new, sock->local_addr->sa.sin.sin_family, SOCK_STREAM); @@ -249,8 +250,9 @@ #endif /* TCP_NODELAY_INHERITED */ if (sock->local_interface_unknown || - /* XXX IPv6 issue */ - sock->local_addr->sa.sin.sin_addr.s_addr == 0) { + !memcmp(sock->local_addr->ipaddr_ptr, + generic_inaddr_any, + sock->local_addr->ipaddr_len)) { /* If the interface address inside the listening socket's local_addr wasn't * up-to-date, we don't know local interface of the connected socket either. *