While patching sockopt.c, I should point out the need for the following
case in the Win32 sockopt.c's apr_socket_opt_set routine:
case APR_SO_SNDBUF:
if (setsockopt(sock->socketdes, SOL_SOCKET, SO_SNDBUF, (void
*)&on, sizeof(int)) == -1) {
return apr_get_netos_error();
}
break;
Without it one cannot set the send buffer size on Windows, which leads
to a performance penalty on Windows.
--
Jess Holle
Justin Erenkrantz wrote:
--On
Saturday, April 3, 2004 5:15 PM +0000 [EMAIL PROTECTED] wrote:
jerenkrantz 2004/04/03 09:15:52
Modified: . CHANGES
network_io/unix sockopt.c
network_io/win32 sockopt.c
Log:
Even if we do not check the value of APR_IPV6_V6ONLY before setting,
we
still must set the option cache if we're setting APR_IPV6_V6ONLY.
Otherwise, later apr_socket_opt_get calls will fail.
This fixes Listen directives on IPv6 machines where IPV6_V6ONLY may
be
enabled (i.e. FreeBSD 5.x, OpenBSD, NetBSD) where it would not
properly
bind to the IPv4 socket.
This fixes an issue we saw on hermes.apache.org where the Listen
directive wasn't binding to the correct interfaces.
I was pretty sure that httpd was doing the right thing here, but it was
APR that lost the setting of APR_IPV6_V6ONLY - so httpd thought that
IPV6_V6ONLY was disabled when it really had already been enabled.
Hence, it collapsed the IPv4 address into the IPv6 socket - causing it
not to bind to IPv4. -- justin
|