]> granicus.if.org Git - php/commitdiff
Fixed error handling for ext/sockets under win
authorAnatol Belski <ab@php.net>
Thu, 16 May 2013 17:23:31 +0000 (19:23 +0200)
committerAnatol Belski <ab@php.net>
Thu, 16 May 2013 17:23:31 +0000 (19:23 +0200)
WSAGetLastError() must be the very next call after a socket
function had an invalid return. Any function call inbetween
will clear the error information.

ext/sockets/sockets.c

index 06bd0ec6b4fec154b42858d2727259edd664e831..b3bcbf26005bacc79040dc46a6c3d1dc7c43c714 100644 (file)
@@ -1822,8 +1822,8 @@ PHP_FUNCTION(socket_recvfrom)
                        retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&s_un, (socklen_t *)&slen);
 
                        if (retval < 0) {
-                               efree(recv_buf);
                                PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
+                               efree(recv_buf);
                                RETURN_FALSE;
                        }
 
@@ -1847,8 +1847,8 @@ PHP_FUNCTION(socket_recvfrom)
                        retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&sin, (socklen_t *)&slen);
 
                        if (retval < 0) {
-                               efree(recv_buf);
                                PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
+                               efree(recv_buf);
                                RETURN_FALSE;
                        }
 
@@ -1876,8 +1876,8 @@ PHP_FUNCTION(socket_recvfrom)
                        retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&sin6, (socklen_t *)&slen);
 
                        if (retval < 0) {
-                               efree(recv_buf);
                                PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
+                               efree(recv_buf);
                                RETURN_FALSE;
                        }