Ryan, I understand the motivation for this, but it breaks Windows. In some cases we do not want to close the socket on Windows; it can be reused for a big performance boost.
Bill ----- Original Message ----- From: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Saturday, November 10, 2001 1:26 PM Subject: cvs commit: httpd-2.0/server/mpm/worker worker.c > rbb 01/11/10 10:26:30 > > Modified: include http_connection.h > server connection.c > server/mpm/beos beos.c > server/mpm/mpmt_os2 mpmt_os2_child.c > server/mpm/netware mpm_netware.c > server/mpm/perchild perchild.c > server/mpm/prefork prefork.c > server/mpm/spmt_os2 spmt_os2.c > server/mpm/threaded threaded.c > server/mpm/winnt mpm_winnt.c > server/mpm/worker worker.c > Log: > Remove ap_lingering_close from all of the MPMs. This is now done as > a cleanup registered with the connection_pool. I have also turned > ap_lingering_close into a static function, because it is only used > in connection.c. This is the next step to consolidating all of the > socket function calls. ap_lingering_close will only be added if the > core is dealing with a standard socket. > > Revision Changes Path > 1.38 +0 -16 httpd-2.0/include/http_connection.h > > Index: http_connection.h > =================================================================== > RCS file: /home/cvs/httpd-2.0/include/http_connection.h,v > retrieving revision 1.37 > retrieving revision 1.38 > diff -u -r1.37 -r1.38 > --- http_connection.h 2001/07/27 21:01:16 1.37 > +++ http_connection.h 2001/11/10 18:26:29 1.38 > @@ -88,22 +88,6 @@ > > AP_CORE_DECLARE(void) ap_flush_conn(conn_rec *c); > > -/** > - * This function is responsible for the following cases: > - * <pre> > - * we now proceed to read from the client until we get EOF, or until > - * MAX_SECS_TO_LINGER has passed. the reasons for doing this are > - * documented in a draft: > - * > - * http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt > - * > - * in a nutshell -- if we don't make this effort we risk causing > - * TCP RST packets to be sent which can tear down a connection before > - * all the response data has been sent to the client. > - * </pre> > - * @param c The connection we are closing > - */ > -void ap_lingering_close(conn_rec *); > #endif > > /* Hooks */ > > > > 1.85 +7 -3 httpd-2.0/server/connection.c > > Index: connection.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/connection.c,v > retrieving revision 1.84 > retrieving revision 1.85 > diff -u -r1.84 -r1.85 > --- connection.c 2001/07/31 00:34:27 1.84 > +++ connection.c 2001/11/10 18:26:29 1.85 > @@ -149,13 +149,14 @@ > * all the response data has been sent to the client. > */ > #define SECONDS_TO_LINGER 2 > -void ap_lingering_close(conn_rec *c) > +static apr_status_t ap_lingering_close(void *dummy) > { > char dummybuf[512]; > apr_size_t nbytes = sizeof(dummybuf); > apr_status_t rc; > apr_int32_t timeout; > apr_int32_t total_linger_time = 0; > + conn_rec *c = dummy; > > ap_update_child_status(AP_CHILD_THREAD_FROM_ID(c->id), SERVER_CLOSING, NULL); > > @@ -175,7 +176,7 @@ > > if (c->aborted) { > apr_socket_close(c->client_socket); > - return; > + return APR_SUCCESS; > } > > /* Shut down the socket for write, which will send a FIN > @@ -185,7 +186,7 @@ > if (apr_shutdown(c->client_socket, APR_SHUTDOWN_WRITE) != APR_SUCCESS || > c->aborted) { > apr_socket_close(c->client_socket); > - return; > + return APR_SUCCESS; > } > > /* Read all data from the peer until we reach "end-of-file" (FIN > @@ -208,6 +209,7 @@ > } > > apr_socket_close(c->client_socket); > + return APR_SUCCESS; > } > > AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c) > @@ -261,6 +263,8 @@ > conn->client_socket = inout; > > conn->id = id; > + > + apr_pool_cleanup_register(p, conn, ap_lingering_close, apr_pool_cleanup_null); > > return conn; > } > > > > 1.66 +0 -1 httpd-2.0/server/mpm/beos/beos.c > > Index: beos.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/beos/beos.c,v > retrieving revision 1.65 > retrieving revision 1.66 > diff -u -r1.65 -r1.66 > --- beos.c 2001/11/08 22:49:12 1.65 > +++ beos.c 2001/11/10 18:26:29 1.66 > @@ -316,7 +316,6 @@ > > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > } > > > > > 1.3 +0 -1 httpd-2.0/server/mpm/mpmt_os2/mpmt_os2_child.c > > Index: mpmt_os2_child.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/mpmt_os2/mpmt_os2_child.c,v > retrieving revision 1.2 > retrieving revision 1.3 > diff -u -r1.2 -r1.3 > --- mpmt_os2_child.c 2001/08/20 16:10:57 1.2 > +++ mpmt_os2_child.c 2001/11/10 18:26:29 1.3 > @@ -411,7 +411,6 @@ > > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > > apr_pool_destroy(pconn); > > > > 1.7 +0 -1 httpd-2.0/server/mpm/netware/mpm_netware.c > > Index: mpm_netware.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/netware/mpm_netware.c,v > retrieving revision 1.6 > retrieving revision 1.7 > diff -u -r1.6 -r1.7 > --- mpm_netware.c 2001/11/07 05:29:58 1.6 > +++ mpm_netware.c 2001/11/10 18:26:29 1.7 > @@ -509,7 +509,6 @@ > current_conn = ap_new_connection(ptrans, ap_server_conf, csd, >my_worker_num); > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > > } > > > > 1.82 +0 -1 httpd-2.0/server/mpm/perchild/perchild.c > > Index: perchild.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/perchild/perchild.c,v > retrieving revision 1.81 > retrieving revision 1.82 > diff -u -r1.81 -r1.82 > --- perchild.c 2001/11/07 05:29:58 1.81 > +++ perchild.c 2001/11/10 18:26:29 1.82 > @@ -505,7 +505,6 @@ > current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id); > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > } > > > > > 1.209 +0 -1 httpd-2.0/server/mpm/prefork/prefork.c > > Index: prefork.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/prefork/prefork.c,v > retrieving revision 1.208 > retrieving revision 1.209 > diff -u -r1.208 -r1.209 > --- prefork.c 2001/11/10 08:00:41 1.208 > +++ prefork.c 2001/11/10 18:26:29 1.209 > @@ -792,7 +792,6 @@ > my_child_num); > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > > /* Check the pod after processing a connection so that we'll go away > > > > 1.105 +0 -1 httpd-2.0/server/mpm/spmt_os2/spmt_os2.c > > Index: spmt_os2.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/spmt_os2/spmt_os2.c,v > retrieving revision 1.104 > retrieving revision 1.105 > diff -u -r1.104 -r1.105 > --- spmt_os2.c 2001/11/07 05:29:58 1.104 > +++ spmt_os2.c 2001/11/10 18:26:29 1.105 > @@ -685,7 +685,6 @@ > > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > } > > > > > 1.68 +0 -1 httpd-2.0/server/mpm/threaded/threaded.c > > Index: threaded.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/threaded/threaded.c,v > retrieving revision 1.67 > retrieving revision 1.68 > diff -u -r1.67 -r1.68 > --- threaded.c 2001/11/07 05:29:58 1.67 > +++ threaded.c 2001/11/10 18:26:29 1.68 > @@ -478,7 +478,6 @@ > current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id); > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > } > > > > > 1.188 +0 -1 httpd-2.0/server/mpm/winnt/mpm_winnt.c > > Index: mpm_winnt.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/winnt/mpm_winnt.c,v > retrieving revision 1.187 > retrieving revision 1.188 > diff -u -r1.187 -r1.188 > --- mpm_winnt.c 2001/11/07 05:29:58 1.187 > +++ mpm_winnt.c 2001/11/10 18:26:29 1.188 > @@ -901,7 +901,6 @@ > apr_getsocketopt(context->sock, APR_SO_DISCONNECTED, &disconnected); > if (!disconnected) { > context->accept_socket = INVALID_SOCKET; > - ap_lingering_close(c); > } > } > else { > > > > 1.33 +0 -1 httpd-2.0/server/mpm/worker/worker.c > > Index: worker.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v > retrieving revision 1.32 > retrieving revision 1.33 > diff -u -r1.32 -r1.33 > --- worker.c 2001/11/07 05:29:58 1.32 > +++ worker.c 2001/11/10 18:26:30 1.33 > @@ -502,7 +502,6 @@ > current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id); > if (current_conn) { > ap_process_connection(current_conn); > - ap_lingering_close(current_conn); > } > } > > > > >