srinatar Fri, 04 Sep 2009 07:59:48 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=288034
Log: - Fixed bug #49447 (php engine need to correctly check for socket API return status on windows). (Sriram Natarajan) Bug: http://bugs.php.net/49447 (Assigned) php engine need to correctly check for socket API return status on windows Changed paths: U php/php-src/branches/PHP_5_2/NEWS U php/php-src/branches/PHP_5_2/ext/ftp/ftp.c U php/php-src/branches/PHP_5_2/ext/openssl/xp_ssl.c U php/php-src/branches/PHP_5_2/ext/sockets/sockets.c U php/php-src/branches/PHP_5_2/main/network.c U php/php-src/branches/PHP_5_2/main/streams/xp_socket.c U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/ftp/ftp.c U php/php-src/branches/PHP_5_3/ext/openssl/xp_ssl.c U php/php-src/branches/PHP_5_3/ext/sockets/sockets.c U php/php-src/branches/PHP_5_3/main/network.c U php/php-src/branches/PHP_5_3/main/streams/xp_socket.c U php/php-src/trunk/ext/ftp/ftp.c U php/php-src/trunk/ext/openssl/xp_ssl.c U php/php-src/trunk/ext/sockets/sockets.c U php/php-src/trunk/main/network.c U php/php-src/trunk/main/streams/xp_socket.c
Modified: php/php-src/branches/PHP_5_2/NEWS =================================================================== --- php/php-src/branches/PHP_5_2/NEWS 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_2/NEWS 2009-09-04 07:59:48 UTC (rev 288034) @@ -2,6 +2,8 @@ ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 0? Sep 2009, PHP 5.2.11 - Fixed bug #48060 (pdo_pgsql - large objects are returned as empty). (Matteo) +- Fixed bug #49447 (php engine need to correctly check for socket API + return status on windows). (Sriram Natarajan) 03 Sep 2009, PHP 5.2.11RC2 Modified: php/php-src/branches/PHP_5_2/ext/ftp/ftp.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/ftp/ftp.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_2/ext/ftp/ftp.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -147,7 +147,7 @@ size = sizeof(ftp->localaddr); memset(&ftp->localaddr, 0, size); - if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) == -1) { + if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname failed: %s (%d)", strerror(errno), errno); goto bail; } @@ -1387,7 +1387,7 @@ sa = (struct sockaddr *) &ftp->localaddr; /* bind/listen */ - if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == -1) { + if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == SOCK_ERR) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "socket() failed: %s (%d)", strerror(errno), errno); goto bail; } @@ -1420,17 +1420,17 @@ php_any_addr(sa->sa_family, &addr, 0); size = php_sockaddr_size(&addr); - if (bind(fd, (struct sockaddr*) &addr, size) == -1) { + if (bind(fd, (struct sockaddr*) &addr, size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "bind() failed: %s (%d)", strerror(errno), errno); goto bail; } - if (getsockname(fd, (struct sockaddr*) &addr, &size) == -1) { + if (getsockname(fd, (struct sockaddr*) &addr, &size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname() failed: %s (%d)", strerror(errno), errno); goto bail; } - if (listen(fd, 5) == -1) { + if (listen(fd, 5) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "listen() failed: %s (%d)", strerror(errno), errno); goto bail; } Modified: php/php-src/branches/PHP_5_2/ext/openssl/xp_ssl.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/openssl/xp_ssl.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_2/ext/openssl/xp_ssl.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -272,6 +272,10 @@ SSL_CTX_free(sslsock->ctx); sslsock->ctx = NULL; } +#ifdef PHP_WIN32 + if (sslsock->s.socket == -1) + sslsock->s.socket = SOCK_ERR; +#endif if (sslsock->s.socket != SOCK_ERR) { #ifdef PHP_WIN32 /* prevent more data from coming in */ Modified: php/php-src/branches/PHP_5_2/ext/sockets/sockets.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/sockets/sockets.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_2/ext/sockets/sockets.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -228,14 +228,14 @@ sock->type = PF_INET; - if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) < 0) { + if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) != 0) { PHP_SOCKET_ERROR(sock, "unable to bind to given address", errno); close(sock->bsd_socket); efree(sock); return 0; } - if (listen(sock->bsd_socket, backlog) < 0) { + if (listen(sock->bsd_socket, backlog) != 0) { PHP_SOCKET_ERROR(sock, "unable to listen on socket", errno); close(sock->bsd_socket); efree(sock); Modified: php/php-src/branches/PHP_5_2/main/network.c =================================================================== --- php/php-src/branches/PHP_5_2/main/network.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_2/main/network.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -308,7 +308,7 @@ SET_SOCKET_BLOCKING_MODE(sockfd, orig_flags); - if ((n = connect(sockfd, addr, addrlen)) < 0) { + if ((n = connect(sockfd, addr, addrlen)) != 0) { error = php_socket_errno(); if (error_code) { @@ -342,7 +342,7 @@ BSD-derived systems set errno correctly Solaris returns -1 from getsockopt in case of error */ - if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) < 0) { + if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) != 0) { ret = -1; } } else { @@ -369,7 +369,7 @@ if (asynchronous) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Asynchronous connect() not supported on this platform"); } - return connect(sockfd, addr, addrlen); + return (connect(sockfd, addr, addrlen) == 0) ? 0 : -1; #endif } /* }}} */ @@ -709,7 +709,7 @@ clisock = accept(srvsock, (struct sockaddr*)&sa, &sl); - if (clisock >= 0) { + if (clisock != SOCK_ERR) { php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, textaddr, textaddrlen, addr, addrlen @@ -861,7 +861,7 @@ timeout ? &working_timeout : NULL, error_string, error_code); - if (n != SOCK_CONN_ERR) { + if (n != -1) { goto connected; } Modified: php/php-src/branches/PHP_5_2/main/streams/xp_socket.c =================================================================== --- php/php-src/branches/PHP_5_2/main/streams/xp_socket.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_2/main/streams/xp_socket.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -181,6 +181,10 @@ if (close_handle) { +#ifdef PHP_WIN32 + if (sock->socket == -1) + sock->socket = SOCK_ERR; +#endif if (sock->socket != SOCK_ERR) { #ifdef PHP_WIN32 /* prevent more data from coming in */ @@ -226,10 +230,12 @@ struct sockaddr *addr, socklen_t addrlen TSRMLS_DC) { + int ret; if (addr) { - return sendto(sock->socket, buf, buflen, flags, addr, addrlen); + ret = sendto(sock->socket, buf, buflen, flags, addr, addrlen); + return (ret == SOCK_CONN_ERR) ? -1 : ret; } - return send(sock->socket, buf, buflen, flags); + return ((ret = send(sock->socket, buf, buflen, flags)) == SOCK_CONN_ERR) ? -1 : ret; } static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t buflen, int flags, @@ -244,10 +250,12 @@ if (want_addr) { ret = recvfrom(sock->socket, buf, buflen, flags, (struct sockaddr*)&sa, &sl); + ret = (ret == SOCK_CONN_ERR) ? -1 : ret; php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, textaddr, textaddrlen, addr, addrlen TSRMLS_CC); } else { ret = recv(sock->socket, buf, buflen, flags); + ret = (ret == SOCK_CONN_ERR) ? -1 : ret; } return ret; @@ -281,7 +289,7 @@ if (sock->socket == -1) { alive = 0; } else if (php_pollfd_for(sock->socket, PHP_POLLREADABLE|POLLPRI, &tv) > 0) { - if (0 >= recv(sock->socket, &buf, sizeof(buf), MSG_PEEK) && php_socket_errno() != EWOULDBLOCK) { + if (recv(sock->socket, &buf, sizeof(buf), MSG_PEEK) != SOCK_CONN_ERR && php_socket_errno() != EWOULDBLOCK) { alive = 0; } } @@ -312,7 +320,7 @@ switch (xparam->op) { case STREAM_XPORT_OP_LISTEN: - xparam->outputs.returncode = listen(sock->socket, 5); + xparam->outputs.returncode = (listen(sock->socket, 5) == 0) ? 0: -1; return PHP_STREAM_OPTION_RETURN_OK; case STREAM_XPORT_OP_GET_NAME: Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_3/NEWS 2009-09-04 07:59:48 UTC (rev 288034) @@ -182,6 +182,8 @@ - Fixed bug #28038 (Sent incorrect RCPT TO commands to SMTP server) (Garrett) - Fixed bug #27051 (Impersonation with FastCGI does not exec process as impersonated user). (Pierre) +- Fixed bug #49447 (php engine need to correctly check for socket API + return status on windows). (Sriram Natarajan) 30 Jun 2009, PHP 5.3.0 - Upgraded bundled PCRE to version 7.9. (Nuno) Modified: php/php-src/branches/PHP_5_3/ext/ftp/ftp.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/ftp/ftp.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_3/ext/ftp/ftp.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -147,7 +147,7 @@ size = sizeof(ftp->localaddr); memset(&ftp->localaddr, 0, size); - if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) == -1) { + if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname failed: %s (%d)", strerror(errno), errno); goto bail; } @@ -1387,7 +1387,7 @@ sa = (struct sockaddr *) &ftp->localaddr; /* bind/listen */ - if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == -1) { + if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == SOCK_ERR) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "socket() failed: %s (%d)", strerror(errno), errno); goto bail; } @@ -1420,17 +1420,17 @@ php_any_addr(sa->sa_family, &addr, 0); size = php_sockaddr_size(&addr); - if (bind(fd, (struct sockaddr*) &addr, size) == -1) { + if (bind(fd, (struct sockaddr*) &addr, size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "bind() failed: %s (%d)", strerror(errno), errno); goto bail; } - if (getsockname(fd, (struct sockaddr*) &addr, &size) == -1) { + if (getsockname(fd, (struct sockaddr*) &addr, &size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname() failed: %s (%d)", strerror(errno), errno); goto bail; } - if (listen(fd, 5) == -1) { + if (listen(fd, 5) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "listen() failed: %s (%d)", strerror(errno), errno); goto bail; } Modified: php/php-src/branches/PHP_5_3/ext/openssl/xp_ssl.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/openssl/xp_ssl.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_3/ext/openssl/xp_ssl.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -259,6 +259,10 @@ SSL_CTX_free(sslsock->ctx); sslsock->ctx = NULL; } +#ifdef PHP_WIN32 + if (sslsock->s.socket == -1) + sslsock->s.socket = SOCK_ERR; +#endif if (sslsock->s.socket != SOCK_ERR) { #ifdef PHP_WIN32 /* prevent more data from coming in */ Modified: php/php-src/branches/PHP_5_3/ext/sockets/sockets.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/sockets/sockets.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_3/ext/sockets/sockets.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -370,14 +370,14 @@ sock->type = PF_INET; - if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) < 0) { + if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) != 0) { PHP_SOCKET_ERROR(sock, "unable to bind to given address", errno); close(sock->bsd_socket); efree(sock); return 0; } - if (listen(sock->bsd_socket, backlog) < 0) { + if (listen(sock->bsd_socket, backlog) != 0) { PHP_SOCKET_ERROR(sock, "unable to listen on socket", errno); close(sock->bsd_socket); efree(sock); Modified: php/php-src/branches/PHP_5_3/main/network.c =================================================================== --- php/php-src/branches/PHP_5_3/main/network.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_3/main/network.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -314,7 +314,7 @@ SET_SOCKET_BLOCKING_MODE(sockfd, orig_flags); - if ((n = connect(sockfd, addr, addrlen)) < 0) { + if ((n = connect(sockfd, addr, addrlen)) != 0) { error = php_socket_errno(); if (error_code) { @@ -348,7 +348,7 @@ BSD-derived systems set errno correctly Solaris returns -1 from getsockopt in case of error */ - if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) < 0) { + if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) != 0) { ret = -1; } } else { @@ -375,7 +375,7 @@ if (asynchronous) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Asynchronous connect() not supported on this platform"); } - return connect(sockfd, addr, addrlen); + return (connect(sockfd, addr, addrlen) == 0) ? 0 : -1; #endif } /* }}} */ @@ -715,7 +715,7 @@ clisock = accept(srvsock, (struct sockaddr*)&sa, &sl); - if (clisock >= 0) { + if (clisock != SOCK_ERR) { php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, textaddr, textaddrlen, addr, addrlen @@ -867,7 +867,7 @@ timeout ? &working_timeout : NULL, error_string, error_code); - if (n != SOCK_CONN_ERR) { + if (n != -1) { goto connected; } Modified: php/php-src/branches/PHP_5_3/main/streams/xp_socket.c =================================================================== --- php/php-src/branches/PHP_5_3/main/streams/xp_socket.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/branches/PHP_5_3/main/streams/xp_socket.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -181,6 +181,10 @@ if (close_handle) { +#ifdef PHP_WIN32 + if (sock->socket == -1) + sock->socket = SOCK_ERR; +#endif if (sock->socket != SOCK_ERR) { #ifdef PHP_WIN32 /* prevent more data from coming in */ @@ -226,10 +230,12 @@ struct sockaddr *addr, socklen_t addrlen TSRMLS_DC) { + int ret; if (addr) { - return sendto(sock->socket, buf, buflen, flags, addr, addrlen); + ret = sendto(sock->socket, buf, buflen, flags, addr, addrlen); + return (ret == SOCK_CONN_ERR) ? -1 : ret; } - return send(sock->socket, buf, buflen, flags); + return ((ret = send(sock->socket, buf, buflen, flags)) == SOCK_CONN_ERR) ? -1 : ret; } static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t buflen, int flags, @@ -244,10 +250,12 @@ if (want_addr) { ret = recvfrom(sock->socket, buf, buflen, flags, (struct sockaddr*)&sa, &sl); + ret = (ret == SOCK_CONN_ERR) ? -1 : ret; php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, textaddr, textaddrlen, addr, addrlen TSRMLS_CC); } else { ret = recv(sock->socket, buf, buflen, flags); + ret = (ret == SOCK_CONN_ERR) ? -1 : ret; } return ret; @@ -281,7 +289,7 @@ if (sock->socket == -1) { alive = 0; } else if (php_pollfd_for(sock->socket, PHP_POLLREADABLE|POLLPRI, &tv) > 0) { - if (0 >= recv(sock->socket, &buf, sizeof(buf), MSG_PEEK) && php_socket_errno() != EWOULDBLOCK) { + if (recv(sock->socket, &buf, sizeof(buf), MSG_PEEK) != SOCK_CONN_ERR && php_socket_errno() != EWOULDBLOCK) { alive = 0; } } @@ -312,7 +320,7 @@ switch (xparam->op) { case STREAM_XPORT_OP_LISTEN: - xparam->outputs.returncode = listen(sock->socket, 5); + xparam->outputs.returncode = (listen(sock->socket, 5) == 0) ? 0: -1; return PHP_STREAM_OPTION_RETURN_OK; case STREAM_XPORT_OP_GET_NAME: Modified: php/php-src/trunk/ext/ftp/ftp.c =================================================================== --- php/php-src/trunk/ext/ftp/ftp.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/trunk/ext/ftp/ftp.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -148,7 +148,7 @@ size = sizeof(ftp->localaddr); memset(&ftp->localaddr, 0, size); - if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) == -1) { + if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, &size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname failed: %s (%d)", strerror(errno), errno); goto bail; } @@ -1388,7 +1388,7 @@ sa = (struct sockaddr *) &ftp->localaddr; /* bind/listen */ - if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == -1) { + if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == SOCK_ERR) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "socket() failed: %s (%d)", strerror(errno), errno); goto bail; } @@ -1421,17 +1421,17 @@ php_any_addr(sa->sa_family, &addr, 0); size = php_sockaddr_size(&addr); - if (bind(fd, (struct sockaddr*) &addr, size) == -1) { + if (bind(fd, (struct sockaddr*) &addr, size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "bind() failed: %s (%d)", strerror(errno), errno); goto bail; } - if (getsockname(fd, (struct sockaddr*) &addr, &size) == -1) { + if (getsockname(fd, (struct sockaddr*) &addr, &size) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname() failed: %s (%d)", strerror(errno), errno); goto bail; } - if (listen(fd, 5) == -1) { + if (listen(fd, 5) != 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "listen() failed: %s (%d)", strerror(errno), errno); goto bail; } Modified: php/php-src/trunk/ext/openssl/xp_ssl.c =================================================================== --- php/php-src/trunk/ext/openssl/xp_ssl.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/trunk/ext/openssl/xp_ssl.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -259,6 +259,10 @@ SSL_CTX_free(sslsock->ctx); sslsock->ctx = NULL; } +#ifdef PHP_WIN32 + if (sslsock->s.socket == -1) + sslsock->s.socket = SOCK_ERR; +#endif if (sslsock->s.socket != SOCK_ERR) { #ifdef PHP_WIN32 /* prevent more data from coming in */ Modified: php/php-src/trunk/ext/sockets/sockets.c =================================================================== --- php/php-src/trunk/ext/sockets/sockets.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/trunk/ext/sockets/sockets.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -370,14 +370,14 @@ sock->type = PF_INET; - if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) < 0) { + if (bind(sock->bsd_socket, (struct sockaddr *)&la, sizeof(la)) != 0) { PHP_SOCKET_ERROR(sock, "unable to bind to given address", errno); close(sock->bsd_socket); efree(sock); return 0; } - if (listen(sock->bsd_socket, backlog) < 0) { + if (listen(sock->bsd_socket, backlog) != 0) { PHP_SOCKET_ERROR(sock, "unable to listen on socket", errno); close(sock->bsd_socket); efree(sock); Modified: php/php-src/trunk/main/network.c =================================================================== --- php/php-src/trunk/main/network.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/trunk/main/network.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -314,7 +314,7 @@ SET_SOCKET_BLOCKING_MODE(sockfd, orig_flags); - if ((n = connect(sockfd, addr, addrlen)) < 0) { + if ((n = connect(sockfd, addr, addrlen)) != 0) { error = php_socket_errno(); if (error_code) { @@ -348,7 +348,7 @@ BSD-derived systems set errno correctly Solaris returns -1 from getsockopt in case of error */ - if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) < 0) { + if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) != 0) { ret = -1; } } else { @@ -375,7 +375,7 @@ if (asynchronous) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Asynchronous connect() not supported on this platform"); } - return connect(sockfd, addr, addrlen); + return (connect(sockfd, addr, addrlen) == 0) ? 0 : -1; #endif } /* }}} */ @@ -715,7 +715,7 @@ clisock = accept(srvsock, (struct sockaddr*)&sa, &sl); - if (clisock >= 0) { + if (clisock != SOCK_ERR) { php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, textaddr, textaddrlen, addr, addrlen @@ -867,7 +867,7 @@ timeout ? &working_timeout : NULL, error_string, error_code); - if (n != SOCK_CONN_ERR) { + if (n != -1) { goto connected; } Modified: php/php-src/trunk/main/streams/xp_socket.c =================================================================== --- php/php-src/trunk/main/streams/xp_socket.c 2009-09-04 07:57:24 UTC (rev 288033) +++ php/php-src/trunk/main/streams/xp_socket.c 2009-09-04 07:59:48 UTC (rev 288034) @@ -181,6 +181,10 @@ if (close_handle) { +#ifdef PHP_WIN32 + if (sock->socket == -1) + sock->socket = SOCK_ERR; +#endif if (sock->socket != SOCK_ERR) { #ifdef PHP_WIN32 /* prevent more data from coming in */ @@ -226,10 +230,12 @@ struct sockaddr *addr, socklen_t addrlen TSRMLS_DC) { + int ret; if (addr) { - return sendto(sock->socket, buf, buflen, flags, addr, addrlen); + ret = sendto(sock->socket, buf, buflen, flags, addr, addrlen); + return (ret == SOCK_CONN_ERR) ? -1 : ret; } - return send(sock->socket, buf, buflen, flags); + return ((ret = send(sock->socket, buf, buflen, flags)) == SOCK_CONN_ERR) ? -1 : ret; } static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t buflen, int flags, @@ -244,10 +250,12 @@ if (want_addr) { ret = recvfrom(sock->socket, buf, buflen, flags, (struct sockaddr*)&sa, &sl); + ret = (ret == SOCK_CONN_ERR) ? -1 : ret; php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl, textaddr, textaddrlen, addr, addrlen TSRMLS_CC); } else { ret = recv(sock->socket, buf, buflen, flags); + ret = (ret == SOCK_CONN_ERR) ? -1 : ret; } return ret; @@ -281,7 +289,7 @@ if (sock->socket == -1) { alive = 0; } else if (php_pollfd_for(sock->socket, PHP_POLLREADABLE|POLLPRI, &tv) > 0) { - if (0 >= recv(sock->socket, &buf, sizeof(buf), MSG_PEEK) && php_socket_errno() != EWOULDBLOCK) { + if (recv(sock->socket, &buf, sizeof(buf), MSG_PEEK) != SOCK_CONN_ERR && php_socket_errno() != EWOULDBLOCK) { alive = 0; } } @@ -312,7 +320,7 @@ switch (xparam->op) { case STREAM_XPORT_OP_LISTEN: - xparam->outputs.returncode = listen(sock->socket, 5); + xparam->outputs.returncode = (listen(sock->socket, 5) == 0) ? 0: -1; return PHP_STREAM_OPTION_RETURN_OK; case STREAM_XPORT_OP_GET_NAME:
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php