On Tue, Mar 23, 2004 at 04:13:37PM -0600, Albert Chin wrote:
> Is this the appropriate patch to address CAN-2004-0174 in 2.0.49?
Oops, I mean 2.0.48.
> $ cvs diff -r1.99 -r1.100 server/listen.c
> Index: listen.c
> ===================================================================
> RCS file: /home/cvspublic/httpd-2.0/server/listen.c,v
> retrieving revision 1.99
> retrieving revision 1.100
> diff -u -3 -p -r1.99 -r1.100
> --- listen.c 9 Feb 2004 20:40:49 -0000 1.99
> +++ listen.c 19 Mar 2004 11:16:03 -0000 1.100
> @@ -383,6 +383,26 @@ static int ap_listen_open(apr_pool_t *po
> }
> old_listeners = NULL;
>
> +#if AP_NONBLOCK_WHEN_MULTI_LISTEN
> + /* 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
> + */
> + if (ap_listeners->next) {
> + for (lr = ap_listeners; lr; lr = lr->next) {
> + apr_status_t status;
> +
> + status = apr_socket_opt_set(lr->sd, APR_SO_NONBLOCK, 1);
> + if (status != APR_SUCCESS) {
> + ap_log_perror(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, status, pool,
> + "ap_listen_open: unable to make socket non-blocking");
> + return -1;
> + }
> + }
> + }
> +#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
>
> --
> albert chin ([EMAIL PROTECTED])
--
albert chin ([EMAIL PROTECTED])