Damjan Jovanovic : ws2_32: Simplify some socket tests by adding a function that generates a pair of connected sockets .

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 25 14:43:43 CDT 2007


Module: wine
Branch: master
Commit: 8178f8fc8815c3ad013ef635fdd8d6ec5ea51bd2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8178f8fc8815c3ad013ef635fdd8d6ec5ea51bd2

Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date:   Fri May 25 13:51:21 2007 +0200

ws2_32: Simplify some socket tests by adding a function that generates a pair of connected sockets.

---

 dlls/ws2_32/tests/sock.c |  168 ++++++++++++++++------------------------------
 1 files changed, 57 insertions(+), 111 deletions(-)

diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index da0dda9..d0b9750 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -146,6 +146,57 @@ static int        client_id;
 
 /**************** General utility functions ***************/
 
+static int tcp_socketpair(SOCKET *src, SOCKET *dst)
+{
+    SOCKET server = INVALID_SOCKET;
+    struct sockaddr_in addr;
+    int len;
+    int ret;
+
+    *src = INVALID_SOCKET;
+    *dst = INVALID_SOCKET;
+
+    *src = socket(AF_INET, SOCK_STREAM, 0);
+    if (*src == INVALID_SOCKET)
+        goto end;
+
+    server = socket(AF_INET, SOCK_STREAM, 0);
+    if (server == INVALID_SOCKET)
+        goto end;
+
+    memset(&addr, 0, sizeof(addr));
+    addr.sin_family = AF_INET;
+    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
+    ret = bind(server, (struct sockaddr*)&addr, sizeof(addr));
+    if (ret != 0)
+        goto end;
+
+    len = sizeof(addr);
+    ret = getsockname(server, (struct sockaddr*)&addr, &len);
+    if (ret != 0)
+        goto end;
+
+    ret = listen(server, 1);
+    if (ret != 0)
+        goto end;
+
+    ret = connect(*src, (struct sockaddr*)&addr, sizeof(addr));
+    if (ret != 0)
+        goto end;
+
+    len = sizeof(addr);
+    *dst = accept(server, (struct sockaddr*)&addr, &len);
+
+end:
+    if (server != INVALID_SOCKET)
+        closesocket(server);
+    if (*src != INVALID_SOCKET && *dst != INVALID_SOCKET)
+        return 0;
+    closesocket(*src);
+    closesocket(*dst);
+    return -1;
+}
+
 static void set_so_opentype ( BOOL overlapped )
 {
     int optval = !overlapped, newval, len = sizeof (int);
@@ -1635,68 +1686,17 @@ static DWORD WINAPI drain_socket_thread(LPVOID arg)
 static void test_send(void)
 {
     SOCKET src = INVALID_SOCKET;
-    SOCKET server = INVALID_SOCKET;
     SOCKET dst = INVALID_SOCKET;
     HANDLE hThread = NULL;
-    struct sockaddr_in addr;
-    int len;
     const int buflen = 1024*1024;
     char *buffer = NULL;
     int ret;
     DWORD id;
 
-    src = socket(AF_INET, SOCK_STREAM, 0);
-    if (src == INVALID_SOCKET)
-    {
-        ok(0, "socket failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    server = socket(AF_INET, SOCK_STREAM, 0);
-    if (server == INVALID_SOCKET)
-    {
-        ok(0, "socket failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    memset(&addr, 0, sizeof(addr));
-    addr.sin_family = AF_INET;
-    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
-    ret = bind(server, (struct sockaddr*)&addr, sizeof(addr));
-    if (ret != 0)
-    {
-        ok(0, "bind failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    len = sizeof(addr);
-    ret = getsockname(server, (struct sockaddr*)&addr, &len);
-    if (ret != 0)
-    {
-        ok(0, "getsockname failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    ret = listen(server, 1);
-    if (ret != 0)
-    {
-        ok(0, "listen failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    ret = connect(src, (struct sockaddr*)&addr, sizeof(addr));
-    if (ret != 0)
-    {
-        ok(0, "connect failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    len = sizeof(addr);
-    dst = accept(server, (struct sockaddr*)&addr, &len);
-    if (dst == INVALID_SOCKET)
+    if (tcp_socketpair(&src, &dst) != 0)
     {
-        ok(0, "accept failed, error %d\n", WSAGetLastError());
-        goto end;
+        ok(0, "creating socket pair failed, skipping test\n");
+        return;
     }
 
     hThread = CreateThread(NULL, 0, drain_socket_thread, &dst, 0, &id);
@@ -1722,8 +1722,6 @@ static void test_send(void)
 end:
     if (src != INVALID_SOCKET)
         closesocket(src);
-    if (server != INVALID_SOCKET)
-        closesocket(server);
     if (dst != INVALID_SOCKET)
         closesocket(dst);
     if (hThread != NULL)
@@ -1734,68 +1732,18 @@ end:
 static void test_write_events(void)
 {
     SOCKET src = INVALID_SOCKET;
-    SOCKET server = INVALID_SOCKET;
     SOCKET dst = INVALID_SOCKET;
     HANDLE hThread = NULL;
     HANDLE hEvent = INVALID_HANDLE_VALUE;
-    struct sockaddr_in addr;
     int len;
     u_long one = 1;
     int ret;
     DWORD id;
 
-    src = socket(AF_INET, SOCK_STREAM, 0);
-    if (src == INVALID_SOCKET)
-    {
-        ok(0, "socket failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    server = socket(AF_INET, SOCK_STREAM, 0);
-    if (server == INVALID_SOCKET)
-    {
-        ok(0, "socket failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    memset(&addr, 0, sizeof(addr));
-    addr.sin_family = AF_INET;
-    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
-    ret = bind(server, (struct sockaddr*)&addr, sizeof(addr));
-    if (ret != 0)
-    {
-        ok(0, "bind failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    len = sizeof(addr);
-    ret = getsockname(server, (struct sockaddr*)&addr, &len);
-    if (ret != 0)
-    {
-        ok(0, "getsockname failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    ret = listen(server, 1);
-    if (ret != 0)
-    {
-        ok(0, "listen failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    ret = connect(src, (struct sockaddr*)&addr, sizeof(addr));
-    if (ret != 0)
-    {
-        ok(0, "connect failed, error %d\n", WSAGetLastError());
-        goto end;
-    }
-
-    len = sizeof(addr);
-    dst = accept(server, (struct sockaddr*)&addr, &len);
-    if (dst == INVALID_SOCKET)
+    if (tcp_socketpair(&src, &dst) != 0)
     {
-        ok(0, "accept failed, error %d\n", WSAGetLastError());
-        goto end;
+        ok(0, "creating socket pair failed, skipping test\n");
+        return;
     }
 
     hThread = CreateThread(NULL, 0, drain_socket_thread, &dst, 0, &id);
@@ -1863,8 +1811,6 @@ static void test_write_events(void)
 end:
     if (src != INVALID_SOCKET)
         closesocket(src);
-    if (server != INVALID_SOCKET)
-        closesocket(server);
     if (dst != INVALID_SOCKET)
         closesocket(dst);
     if (hThread != NULL)




More information about the wine-cvs mailing list