wez Sun Oct 13 19:43:21 2002 EDT Modified files: /php4/main network.c php_network.h Log: A much better probable fix for #16114. Index: php4/main/network.c diff -u php4/main/network.c:1.76 php4/main/network.c:1.77 --- php4/main/network.c:1.76 Sun Oct 13 19:21:05 2002 +++ php4/main/network.c Sun Oct 13 19:43:21 2002 @@ -16,7 +16,7 @@ | Streams work by Wez Furlong <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: network.c,v 1.76 2002/10/13 23:21:05 wez Exp $ */ +/* $Id: network.c,v 1.77 2002/10/13 23:43:21 wez Exp $ */ /*#define DEBUG_MAIN_NETWORK 1*/ @@ -849,6 +849,8 @@ static int php_sockop_close(php_stream *stream, int close_handle TSRMLS_DC) { php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract; + fd_set wrfds, efds; + int n; if (close_handle) { #if HAVE_OPENSSL_EXT @@ -862,7 +864,18 @@ } #endif - /* shutdown(sock->socket, 0); */ + /* prevent more data from coming in */ + shutdown(sock->socket, SHUT_RD); + + /* make sure that the OS sends all data before we close the connection +*/ + do { + FD_ZERO(&wrfds); + FD_SET(sock->socket, &wrfds); + efds = wrfds; + + n = select(sock->socket + 1, NULL, &wrfds, &efds, NULL); + } while (n == -1 && php_socket_errno() == EINTR); + closesocket(sock->socket); } Index: php4/main/php_network.h diff -u php4/main/php_network.h:1.32 php4/main/php_network.h:1.33 --- php4/main/php_network.h:1.32 Sun Oct 13 18:01:40 2002 +++ php4/main/php_network.h Sun Oct 13 19:43:21 2002 @@ -15,7 +15,7 @@ | Author: Stig Venaas <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_network.h,v 1.32 2002/10/13 22:01:40 wez Exp $ */ +/* $Id: php_network.h,v 1.33 2002/10/13 23:43:21 wez Exp $ */ #ifndef _PHP_NETWORK_H #define _PHP_NETWORK_H @@ -27,6 +27,9 @@ # undef FD_SETSIZE # include "arpa/inet.h" # define socklen_t unsigned int +# define SHUT_RD SD_RECEIVE +# define SHUT_WR SD_SEND +# define SHUT_RDWR SD_BOTH #else # undef closesocket # define closesocket close @@ -60,6 +63,14 @@ #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> +#endif + +/* These are here, rather than with the win32 counterparts above, + * since <sys/socket.h> defines them. */ +#ifndef SHUT_RD +# define SHUT_RD 0 +# define SHUT_WR 1 +# define SHUT_RDWR 2 #endif #ifdef HAVE_SYS_TIME_H
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php