--- apr-httpd-2.0.49/network_io/unix/sockets.c.orig 2004-02-13 10:33:51.000000000 +0100 +++ apr-httpd-2.0.49/network_io/unix/sockets.c 2004-04-18 22:49:53.089901496 +0200 @@ -372,7 +372,36 @@ set_socket_vars(*sock, APR_INET, SOCK_STREAM, 0); (*sock)->timeout = -1; } - (*sock)->local_port_unknown = (*sock)->local_interface_unknown = 1; +/* (*sock)->local_port_unknown = (*sock)->local_interface_unknown = 1; */ + if (1) + { + /* fixup socket's peer information. + we need it for the muxmpm. enrico weigelt, metux ITS + + */ + /* XXX next line looks bogus w.r.t. AF_INET6 support */ + + /* adjust remote address */ + (*sock)->remote_addr->salen = sizeof((*sock)->remote_addr->sa); + getpeername( + *thesock, + (struct sockaddr*)&((*sock)->remote_addr->sa), + &((*sock)->remote_addr->salen) + ); + (*sock)->remote_addr->port = ntohs((*sock)->remote_addr->sa.sin.sin_port); + + /* XXX assumes sin_port and sin6_port at same offset */ + + /* adjust local address */ + getsockname( + *thesock, + (struct sockaddr*)&((*sock)->local_addr->sa), + &((*sock)->local_addr->salen) + ); + (*sock)->local_addr->port = ntohs((*sock)->local_addr->sa.sin.sin_port); + (*sock)->local_port_unknown = (*sock)->local_interface_unknown = 0; + } + (*sock)->remote_addr_unknown = 1; (*sock)->socketdes = *thesock; return APR_SUCCESS;