pajoye                                   Fri, 09 Oct 2009 14:20:17 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=289416

Log:
- Merge: Fixed bug #49447 php engine need to correctly check for socket API

Bug: http://bugs.php.net/49447 (Closed) php engine need to correctly check for 
socket API return status on windows
      
Changed paths:
    U   php/php-src/branches/PHP_5_3_1/ext/ftp/ftp.c
    U   php/php-src/branches/PHP_5_3_1/ext/openssl/xp_ssl.c
    U   php/php-src/branches/PHP_5_3_1/ext/sockets/sockets.c
    U   php/php-src/branches/PHP_5_3_1/main/network.c
    U   php/php-src/branches/PHP_5_3_1/main/streams/xp_socket.c

Modified: php/php-src/branches/PHP_5_3_1/ext/ftp/ftp.c
===================================================================
--- php/php-src/branches/PHP_5_3_1/ext/ftp/ftp.c        2009-10-09 14:06:35 UTC 
(rev 289415)
+++ php/php-src/branches/PHP_5_3_1/ext/ftp/ftp.c        2009-10-09 14:20:17 UTC 
(rev 289416)
@@ -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;
        }

Modified: php/php-src/branches/PHP_5_3_1/ext/openssl/xp_ssl.c
===================================================================
--- php/php-src/branches/PHP_5_3_1/ext/openssl/xp_ssl.c 2009-10-09 14:06:35 UTC 
(rev 289415)
+++ php/php-src/branches/PHP_5_3_1/ext/openssl/xp_ssl.c 2009-10-09 14:20:17 UTC 
(rev 289416)
@@ -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_1/ext/sockets/sockets.c
===================================================================
--- php/php-src/branches/PHP_5_3_1/ext/sockets/sockets.c        2009-10-09 
14:06:35 UTC (rev 289415)
+++ php/php-src/branches/PHP_5_3_1/ext/sockets/sockets.c        2009-10-09 
14:20:17 UTC (rev 289416)
@@ -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_1/main/network.c
===================================================================
--- php/php-src/branches/PHP_5_3_1/main/network.c       2009-10-09 14:06:35 UTC 
(rev 289415)
+++ php/php-src/branches/PHP_5_3_1/main/network.c       2009-10-09 14:20:17 UTC 
(rev 289416)
@@ -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_1/main/streams/xp_socket.c
===================================================================
--- php/php-src/branches/PHP_5_3_1/main/streams/xp_socket.c     2009-10-09 
14:06:35 UTC (rev 289415)
+++ php/php-src/branches/PHP_5_3_1/main/streams/xp_socket.c     2009-10-09 
14:20:17 UTC (rev 289416)
@@ -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;
@@ -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