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

Reply via email to