Bruno Jesus : ws2_32/tests: Improve setup_connector_socket to allow non-blocking connect calls.
Module: wine Branch: master Commit: 4ca53984e46a434dcbfc43b3a0f8047dc05473e8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4ca53984e46a434dcbfc43b3a0... Author: Bruno Jesus <00cpxxx(a)gmail.com> Date: Sun Mar 8 01:06:04 2015 -0300 ws2_32/tests: Improve setup_connector_socket to allow non-blocking connect calls. --- 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 7acc489..d741ca5 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; @@ -3632,7 +3635,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; @@ -3640,8 +3643,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; } @@ -3669,7 +3682,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"); @@ -3717,7 +3730,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; @@ -3728,7 +3741,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); @@ -3738,7 +3751,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); @@ -3752,7 +3765,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; @@ -3763,7 +3776,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); @@ -3773,7 +3786,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);
participants (1)
-
Alexandre Julliard