Module: wine Branch: master Commit: 3d51b4eb9de6922affb52e57e36fb28e46f334ed URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d51b4eb9de6922affb52e57e3...
Author: Sebastian Lackner sebastian@fds-team.de Date: Sun Jun 7 19:18:51 2015 +0200
ws2_32/tests: Add tests for calling select with zero timeout.
---
dlls/ws2_32/tests/sock.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 6d328e6..610a563 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -3523,30 +3523,46 @@ static void test_select(void) struct sockaddr_in address; select_thread_params thread_params; HANDLE thread_handle; - DWORD id; + DWORD ticks, id;
fdRead = socket(AF_INET, SOCK_STREAM, 0); ok( (fdRead != INVALID_SOCKET), "socket failed unexpectedly: %d\n", WSAGetLastError() ); fdWrite = socket(AF_INET, SOCK_STREAM, 0); ok( (fdWrite != INVALID_SOCKET), "socket failed unexpectedly: %d\n", WSAGetLastError() );
+ maxfd = fdRead; + if (fdWrite > maxfd) + maxfd = fdWrite; + FD_ZERO_ALL(); FD_SET_ALL(fdRead); FD_SET_ALL(fdWrite); select_timeout.tv_sec=0; - select_timeout.tv_usec=500; + select_timeout.tv_usec=0;
- maxfd = fdRead; - if (fdWrite > maxfd) - maxfd = fdWrite; - + ticks = GetTickCount(); ret = select(maxfd+1, &readfds, &writefds, &exceptfds, &select_timeout); - ok ( (ret == 0), "select should not return any socket handles\n"); - ok ( !FD_ISSET(fdRead, &readfds), "FD should not be set\n"); - ok ( !FD_ISSET(fdWrite, &writefds), "FD should not be set\n"); - ok ( !FD_ISSET(fdRead, &exceptfds), "FD should not be set\n"); - ok ( !FD_ISSET(fdWrite, &exceptfds), "FD should not be set\n"); + ticks = GetTickCount() - ticks; + ok(ret == 0, "select should not return any socket handles\n"); + ok(ticks < 10, "select was blocking for %u ms, expected < 10 ms\n", ticks); + ok(!FD_ISSET(fdRead, &readfds), "FD should not be set\n"); + ok(!FD_ISSET(fdWrite, &writefds), "FD should not be set\n"); + ok(!FD_ISSET(fdRead, &exceptfds), "FD should not be set\n"); + ok(!FD_ISSET(fdWrite, &exceptfds), "FD should not be set\n");
+ FD_ZERO_ALL(); + FD_SET_ALL(fdRead); + FD_SET_ALL(fdWrite); + select_timeout.tv_sec=0; + select_timeout.tv_usec=500; + + ret = select(maxfd+1, &readfds, &writefds, &exceptfds, &select_timeout); + ok(ret == 0, "select should not return any socket handles\n"); + ok(!FD_ISSET(fdRead, &readfds), "FD should not be set\n"); + ok(!FD_ISSET(fdWrite, &writefds), "FD should not be set\n"); + ok(!FD_ISSET(fdRead, &exceptfds), "FD should not be set\n"); + ok(!FD_ISSET(fdWrite, &exceptfds), "FD should not be set\n"); + ok ((listen(fdWrite, SOMAXCONN) == SOCKET_ERROR), "listen did not fail\n"); ret = closesocket(fdWrite); ok ( (ret == 0), "closesocket failed unexpectedly: %d\n", ret);