summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2013-04-22 19:00:13 +0200
committerAnatol Belski <ab@php.net>2013-04-22 19:00:13 +0200
commitf578bb038874098140f408468a3999fe7dc7fc6c (patch)
tree20fac338c993651a8f6af9ef6166eb72a175ddc7 /win32
parent0720804e7cac9b221de9c0994d11de19b1c14037 (diff)
parentb3aa3c26168df33fd739669bb7ede2af88051158 (diff)
downloadphp-git-f578bb038874098140f408468a3999fe7dc7fc6c.tar.gz
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4: updated NEWS Fixed stream_socket_pair() on Windows x64 and
Diffstat (limited to 'win32')
-rw-r--r--win32/sockets.c51
1 files changed, 36 insertions, 15 deletions
diff --git a/win32/sockets.c b/win32/sockets.c
index d64280870f..c8fddd6e52 100644
--- a/win32/sockets.c
+++ b/win32/sockets.c
@@ -39,33 +39,54 @@ PHPAPI int socketpair(int domain, int type, int protocol, SOCKET sock[2])
return -1;
}
+ sock[0] = sock[1] = redirect = INVALID_SOCKET;
- sock[0] = socket(domain, type, protocol);
- address.sin_addr.s_addr = INADDR_ANY;
- address.sin_family = AF_INET;
- address.sin_port = 0;
- bind(sock[0], (struct sockaddr*)&address, sizeof(address));
+ sock[0] = socket(domain, type, protocol);
+ if (INVALID_SOCKET == sock[0]) {
+ goto error;
+ }
+
+ address.sin_addr.s_addr = INADDR_ANY;
+ address.sin_family = AF_INET;
+ address.sin_port = 0;
+
+ if (bind(sock[0], (struct sockaddr*)&address, sizeof(address)) != 0) {
+ goto error;
+ }
if(getsockname(sock[0], (struct sockaddr *)&address, &size) != 0) {
+ goto error;
+ }
+
+ if (listen(sock[0], 2) != 0) {
+ goto error;
+ }
+
+ sock[1] = socket(domain, type, protocol);
+ if (INVALID_SOCKET == sock[1]) {
+ goto error;
}
- listen(sock[0], 2);
- sock[1] = socket(domain, type, protocol);
address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ if(connect(sock[1], (struct sockaddr*)&address, sizeof(address)) != 0) {
+ goto error;
+ }
- connect(sock[1], (struct sockaddr*)&address, sizeof(address));
redirect = accept(sock[0],(struct sockaddr*)&address, &size);
+ if (INVALID_SOCKET == redirect) {
+ goto error;
+ }
closesocket(sock[0]);
sock[0] = redirect;
- if(sock[0] == INVALID_SOCKET ) {
- closesocket(sock[0]);
- closesocket(sock[1]);
- WSASetLastError(WSAECONNABORTED);
- return -1;
- }
-
return 0;
+
+error:
+ closesocket(redirect);
+ closesocket(sock[0]);
+ closesocket(sock[1]);
+ WSASetLastError(WSAECONNABORTED);
+ return -1;
}