listen.c revision 422a2e9e48a594c7d46d62410e45651a7a994430
* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. /* TODO: make_sock is just begging and screaming for APR abstraction */ "make_sock: for address %pI, apr_socket_opt_set: (SO_REUSEADDR)",
"make_sock: for address %pI, apr_socket_opt_set: (SO_KEEPALIVE)",
"make_sock: for address %pI, apr_socket_opt_set: " * To send data over high bandwidth-delay connections at full * speed we must force the TCP window to open wide enough to keep the * pipe full. The default window size on many systems * is only 4kB. Cross-country WAN connections of 100ms * at 1Mb/s are not impossible for well connected sites. * If we assume 100ms cross-country latency, * a 4kB buffer limits throughput to 40kB/s. * To avoid this problem I've added the SendBufferSize directive * to allow the web master to configure send buffer size. * The trade-off of larger buffers is that more kernel memory * is consumed. YMMV, know your customers and your network! * -John Heidemann <johnh@isi.edu> 25-Oct-96 * If no size is specified, use the kernel default. "make_sock: failed to set SendBufferSize for " "address %pI, using default",
"make_sock: could not bind to address %pI",
"make_sock: unable to listen for connections " /* I seriously doubt that this would work on Unix; I have doubts that * it entirely solves the problem on Win32. However, since setting * reuseaddr on the listener -prior- to binding the socket has allowed * us to attach to the same port as an already running instance of * Apache, or even another web server, we cannot identify that this * port was exclusively granted to this instance of Apache. * So set reuseaddr, but do not attempt to do so until we have the * parent listeners successfully bound. "make_sock: for address %pI, apr_socket_opt_set: (SO_REUSEADDR)",
/* see if we've got an old listener for this address:port */ /* Some listeners are not real so they will not have a bind_addr. */ /* If both ports are equivalent, then if their names are equivalent, * then we will re-use the existing record. "alloc_listener: failed to set up sockaddr for %s",
return "Listen setup failed";
/* Initialize to our last configured ap_listener. */ /* this has to survive restarts */ /* Go to the next sockaddr. */ /* What could happen is that we got an IPv6 address, but this system * doesn't actually support IPv6. Try the next address. "alloc_listener: failed to get a socket for %s",
return "Listen setup failed";
/* We need to preserve the order returned by getaddrinfo() */ /* Don't allocate a default listener. If we need to listen to a * port, then the user needs to have a Listen directive in their /* If we are trying to bind to 0.0.0.0 and the previous listener * was :: on the same port and in turn that socket does not have * the IPV6_V6ONLY flag set; we must skip the current attempt to * listen (which would generate an error). IPv4 will be handled * on the established IPv6 socket. /* Remove the current listener from the list */ /* If we tried to bind to ::, and the next listener is * on 0.0.0.0 with the same port, don't give a fatal * error. The user will still get a warning from make_sock /* Remove the current listener from the list */ /* Although we've removed ourselves from the list, * we need to make sure that the next iteration won't * consider "previous" a working IPv6 '::' socket. * Changing the family is enough to make sure the * conditions before make_sock() fail. /* close the old listeners */ /* if multiple listening sockets, make them non-blocking so that * if select()/poll() reports readability for a reset connection that * is already forgotten about by the time we call accept, we won't * be hung until another connection arrives on that port "ap_listen_open: unable to make socket non-blocking");
#
endif /* AP_NONBLOCK_WHEN_MULTI_LISTEN */ /* we come through here on both passes of the open logs phase * only register the cleanup once... otherwise we try to close * listening sockets twice when cleaning up prior to exec return "Invalid address or port";
/* XXX scope id support is useful with link-local IPv6 addresses */ return "Scope id is not supported";
return "Port must be specified";
return "ListenBacklog must be > 0";
return "SendBufferSize must be >= 512 bytes, or 0 for system default.";