summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSriram Natarajan <srinatar@php.net>2009-09-04 07:59:48 +0000
committerSriram Natarajan <srinatar@php.net>2009-09-04 07:59:48 +0000
commit8926fbaf2623e5bcaad43647f329ae62c2fcff5d (patch)
tree88bc4430f54f73359531fcf53a1561ada45b8445
parent2acedb40e6cb2b3703913b89813824fd6657547d (diff)
downloadphp-git-8926fbaf2623e5bcaad43647f329ae62c2fcff5d.tar.gz
- Fixed bug #49447 (php engine need to correctly check for socket API
return status on windows). (Sriram Natarajan)
-rw-r--r--NEWS2
-rw-r--r--ext/ftp/ftp.c10
-rw-r--r--ext/openssl/xp_ssl.c4
-rw-r--r--ext/sockets/sockets.c4
-rw-r--r--main/network.c10
-rw-r--r--main/streams/xp_socket.c16
6 files changed, 30 insertions, 16 deletions
diff --git a/NEWS b/NEWS
index ebcee5eb0f..200ffdd8e2 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
index 82294e077d..9631334655 100644
--- a/ext/ftp/ftp.c
+++ b/ext/ftp/ftp.c
@@ -147,7 +147,7 @@ ftp_open(const char *host, short port, long timeout_sec TSRMLS_DC)
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 @@ ftp_getdata(ftpbuf_t *ftp TSRMLS_DC)
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 @@ ftp_getdata(ftpbuf_t *ftp TSRMLS_DC)
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;
}
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index 2efb60dc5b..414964b01a 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -272,6 +272,10 @@ static int php_openssl_sockop_close(php_stream *stream, int close_handle TSRMLS_
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 */
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index e8fdfb86d5..8f84318038 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -228,14 +228,14 @@ static int php_open_listen_sock(php_socket **php_sock, int port, int backlog TSR
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);
diff --git a/main/network.c b/main/network.c
index a6f2ca6a16..7269a51ae8 100644
--- a/main/network.c
+++ b/main/network.c
@@ -308,7 +308,7 @@ PHPAPI int php_network_connect_socket(php_socket_t sockfd,
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 @@ PHPAPI int php_network_connect_socket(php_socket_t sockfd,
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 @@ ok:
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 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
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 @@ skip_bind:
timeout ? &working_timeout : NULL,
error_string, error_code);
- if (n != SOCK_CONN_ERR) {
+ if (n != -1) {
goto connected;
}
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index aecc425ba1..520d9ee504 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -181,6 +181,10 @@ static int php_sockop_close(php_stream *stream, int close_handle TSRMLS_DC)
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 @@ static inline int sock_sendto(php_netstream_data_t *sock, char *buf, size_t bufl
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 @@ static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t bu
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 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
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 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
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: