[3/4] ws2_32/tests: Improve setup_connector_socket to allow non-blocking connect calls

Bruno Jesus 00cpxxx at gmail.com
Fri Mar 6 12:25:07 CST 2015


-------------- next part --------------

---
 dlls/ws2_32/tests/sock.c | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 4f4c434..360a0a1 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -196,6 +196,9 @@ static int        client_id;
 
 /**************** General utility functions ***************/
 
+static SOCKET setup_server_socket(struct sockaddr_in *addr, int *len);
+static SOCKET setup_connector_socket(struct sockaddr_in *addr, int len, BOOL nonblock);
+
 static int tcp_socketpair(SOCKET *src, SOCKET *dst)
 {
     SOCKET server = INVALID_SOCKET;
@@ -3630,7 +3633,7 @@ static SOCKET setup_server_socket(struct sockaddr_in *addr, int *len)
     return server_socket;
 }
 
-static SOCKET setup_connector_socket(struct sockaddr_in *addr, int len)
+static SOCKET setup_connector_socket(struct sockaddr_in *addr, int len, BOOL nonblock)
 {
     int ret;
     SOCKET connector;
@@ -3638,8 +3641,18 @@ static SOCKET setup_connector_socket(struct sockaddr_in *addr, int len)
     connector = socket(AF_INET, SOCK_STREAM, 0);
     ok(connector != INVALID_SOCKET, "failed to create connector socket %d\n", WSAGetLastError());
 
+    if (nonblock)
+        set_blocking(connector, !nonblock);
+
     ret = connect(connector, (struct sockaddr *)addr, len);
-    ok(!ret, "connecting to accepting socket failed %d\n", WSAGetLastError());
+    if (!nonblock)
+        ok(!ret, "connecting to accepting socket failed %d\n", WSAGetLastError());
+    else if (ret == SOCKET_ERROR)
+    {
+        DWORD error = WSAGetLastError();
+        ok(error == WSAEWOULDBLOCK || error == WSAEINPROGRESS,
+           "expected 10035 or 10036, got %d\n", error);
+    }
 
     return connector;
 }
@@ -3667,7 +3680,7 @@ static void test_accept(void)
         return;
     }
 
-    connector = setup_connector_socket(&address, socklen);
+    connector = setup_connector_socket(&address, socklen, FALSE);
     if (connector == INVALID_SOCKET) goto done;
 
     trace("Blocking accept next\n");
@@ -3715,7 +3728,7 @@ static void test_accept(void)
     server_socket = setup_server_socket(&address, &socklen);
     if (server_socket == INVALID_SOCKET) goto done;
 
-    connector = setup_connector_socket(&address, socklen);
+    connector = setup_connector_socket(&address, socklen, FALSE);
     if (connector == INVALID_SOCKET) goto done;
 
     socklen = 0;
@@ -3726,7 +3739,7 @@ static void test_accept(void)
     connector = INVALID_SOCKET;
 
     socklen = sizeof(address);
-    connector = setup_connector_socket(&address, socklen);
+    connector = setup_connector_socket(&address, socklen, FALSE);
     if (connector == INVALID_SOCKET) goto done;
 
     accepted = WSAAccept(server_socket, NULL, NULL, NULL, 0);
@@ -3736,7 +3749,7 @@ static void test_accept(void)
     accepted = connector = INVALID_SOCKET;
 
     socklen = sizeof(address);
-    connector = setup_connector_socket(&address, socklen);
+    connector = setup_connector_socket(&address, socklen, FALSE);
     if (connector == INVALID_SOCKET) goto done;
 
     socklen = sizeof(ss);
@@ -3750,7 +3763,7 @@ static void test_accept(void)
     accepted = connector = INVALID_SOCKET;
 
     socklen = sizeof(address);
-    connector = setup_connector_socket(&address, socklen);
+    connector = setup_connector_socket(&address, socklen, FALSE);
     if (connector == INVALID_SOCKET) goto done;
 
     socklen = 0;
@@ -3761,7 +3774,7 @@ static void test_accept(void)
     accepted = connector = INVALID_SOCKET;
 
     socklen = sizeof(address);
-    connector = setup_connector_socket(&address, socklen);
+    connector = setup_connector_socket(&address, socklen, FALSE);
     if (connector == INVALID_SOCKET) goto done;
 
     accepted = accept(server_socket, NULL, NULL);
@@ -3771,7 +3784,7 @@ static void test_accept(void)
     accepted = connector = INVALID_SOCKET;
 
     socklen = sizeof(address);
-    connector = setup_connector_socket(&address, socklen);
+    connector = setup_connector_socket(&address, socklen, FALSE);
     if (connector == INVALID_SOCKET) goto done;
 
     socklen = sizeof(ss);
-- 
1.8.3.2



More information about the wine-patches mailing list