2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for ioctlsocket
5 * PROGRAMMERS: Colin Finck
13 int Test_ioctlsocket()
22 /* Start up Winsock */
23 iResult
= WSAStartup(MAKEWORD(2, 2), &wdata
);
24 ok(iResult
== 0, "WSAStartup failed. iResult = %d\n", iResult
);
26 /* If we call ioctlsocket without a socket, it should return with an error and do nothing. */
27 BytesAvailable
= 0xdeadbeef;
28 iResult
= ioctlsocket(0, FIONREAD
, &BytesAvailable
);
29 ok(iResult
== SOCKET_ERROR
, "iResult = %d\n", iResult
);
30 ok(BytesAvailable
== 0xdeadbeef, "BytesAvailable = %ld\n", BytesAvailable
);
32 /* Create the socket */
33 if (!CreateSocket(&sck
))
35 ok(0, "CreateSocket failed. Aborting test.\n");
39 /* Now we can pass at least a socket, but we have no connection yet. The function should return 0. */
40 BytesAvailable
= 0xdeadbeef;
41 iResult
= ioctlsocket(sck
, FIONREAD
, &BytesAvailable
);
42 ok(iResult
== 0, "iResult = %d\n", iResult
);
43 ok(BytesAvailable
== 0, "BytesAvailable = %ld\n", BytesAvailable
);
45 /* Connect to "www.reactos.org" */
46 if (!ConnectToReactOSWebsite(sck
))
48 ok(0, "ConnectToReactOSWebsite failed. Aborting test.\n");
52 /* Even with a connection, there shouldn't be any bytes available. */
53 iResult
= ioctlsocket(sck
, FIONREAD
, &BytesAvailable
);
54 ok(iResult
== 0, "iResult = %d\n", iResult
);
55 ok(BytesAvailable
== 0, "BytesAvailable = %ld\n", BytesAvailable
);
57 /* Send the GET request */
58 if (!GetRequestAndWait(sck
))
60 ok(0, "GetRequestAndWait failed. Aborting test.\n");
64 /* Try ioctlsocket with FIONREAD. There should be bytes available now. */
65 SCKTEST(ioctlsocket(sck
, FIONREAD
, &BytesAvailable
));
66 ok(BytesAvailable
!= 0, "BytesAvailable = %ld\n", BytesAvailable
);
68 /* Get half of the data */
69 BytesToRead
= BytesAvailable
/ 2;
70 pszBuf
= (LPSTR
) HeapAlloc(GetProcessHeap(), 0, BytesToRead
);
71 SCKTEST(recv(sck
, pszBuf
, BytesToRead
, 0));
72 HeapFree(GetProcessHeap(), 0, pszBuf
);
74 BytesToRead
= BytesAvailable
- BytesToRead
;
76 /* Now try ioctlsocket again. BytesAvailable should be at the value saved in BytesToRead now. */
77 SCKTEST(ioctlsocket(sck
, FIONREAD
, &BytesAvailable
));
78 ok(BytesAvailable
== BytesToRead
, "BytesAvailable = %ld\n", BytesAvailable
);
80 /* Read those bytes */
81 pszBuf
= (LPSTR
) HeapAlloc(GetProcessHeap(), 0, BytesToRead
);
82 SCKTEST(recv(sck
, pszBuf
, BytesToRead
, 0));
83 HeapFree(GetProcessHeap(), 0, pszBuf
);
85 /* Try it for the last time. BytesAvailable should be at 0 now. */
86 SCKTEST(ioctlsocket(sck
, FIONREAD
, &BytesAvailable
));
87 ok(BytesAvailable
== 0, "BytesAvailable = %ld\n", BytesAvailable
);
94 START_TEST(ioctlsocket
)