Module: wine Branch: master Commit: 7e4d075ec1859f5fadcad4a39a261237f1d8eb03 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7e4d075ec1859f5fadcad4a39a...
Author: Bruno Jesus 00cpxxx@gmail.com Date: Mon Jan 6 20:58:54 2014 -0200
ws2_32/tests: Add some FIONREAD tests.
---
dlls/ws2_32/tests/sock.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 54b0840..9a90454 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -3859,7 +3859,7 @@ static void test_addr_to_print(void)
static void test_ioctlsocket(void) { - SOCKET sock; + SOCKET sock, src, dst; struct tcp_keepalive kalive; int ret, optval; static const LONG cmds[] = {FIONBIO, FIONREAD, SIOCATMARK}; @@ -3943,6 +3943,32 @@ static void test_ioctlsocket(void) ok(ret == 0 || broken(ret == SOCKET_ERROR), "WSAIoctl failed unexpectedly\n");
closesocket(sock); + + if (tcp_socketpair(&src, &dst) != 0) + { + ok(0, "creating socket pair failed, skipping test\n"); + return; + } + + /* test FIONREAD on TCP sockets */ + optval = 0xdeadbeef; + ret = WSAIoctl(dst, FIONREAD, NULL, 0, &optval, sizeof(optval), &arg, NULL, NULL); + ok(ret == 0, "WSAIoctl failed unexpectedly with error %d\n", WSAGetLastError()); + ok(optval == 0, "FIONREAD should have returned 0 bytes, got %d instead\n", optval); + + optval = 0xdeadbeef; + ok(send(src, "TEST", 4, 0) == 4, "failed to send test data\n"); + Sleep(100); + ret = WSAIoctl(dst, FIONREAD, NULL, 0, &optval, sizeof(optval), &arg, NULL, NULL); + ok(ret == 0, "WSAIoctl failed unexpectedly with error %d\n", WSAGetLastError()); + ok(optval == 4, "FIONREAD should have returned 4 bytes, got %d instead\n", optval); + + closesocket(dst); + optval = 0xdeadbeef; + ret = WSAIoctl(dst, FIONREAD, NULL, 0, &optval, sizeof(optval), &arg, NULL, NULL); + ok(ret == SOCKET_ERROR, "WSAIoctl succeeded unexpectedly\n"); + ok(optval == 0xdeadbeef, "FIONREAD should not have changed last error, got %d instead\n", optval); + closesocket(src); }
static BOOL drain_pause = FALSE;