2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for recv
5 * PROGRAMMERS: Colin Finck
15 /* For valid test results, the ReactOS Website needs to return at least 8 bytes on a "GET / HTTP/1.0" request.
16 Also the first 4 bytes and the last 4 bytes need to be different.
17 Both factors usually apply on standard HTTP responses. */
21 const char szDummyBytes
[RECV_BUF
] = {0xFF, 0x00, 0xFF, 0x00};
23 char szBuf1
[RECV_BUF
];
24 char szBuf2
[RECV_BUF
];
29 /* Start up Winsock */
30 iResult
= WSAStartup(MAKEWORD(2, 2), &wdata
);
31 ok(iResult
== 0, "WSAStartup failed, iResult == %d\n", iResult
);
33 /* If we call recv without a socket, it should return with an error and do nothing. */
34 memcpy(szBuf1
, szDummyBytes
, RECV_BUF
);
35 iResult
= recv(0, szBuf1
, RECV_BUF
, 0);
36 ok(iResult
== SOCKET_ERROR
, "iRseult = %d\n", iResult
);
37 ok(!memcmp(szBuf1
, szDummyBytes
, RECV_BUF
), "not equal\n");
39 /* Create the socket */
40 if (!CreateSocket(&sck
))
42 ok(0, "CreateSocket failed. Aborting test.\n");
46 /* Now we can pass at least a socket, but we have no connection yet. Should return with an error and do nothing. */
47 memcpy(szBuf1
, szDummyBytes
, RECV_BUF
);
48 iResult
= recv(sck
, szBuf1
, RECV_BUF
, 0);
49 ok(iResult
== SOCKET_ERROR
, "iResult = %d\n", iResult
);
50 ok(!memcmp(szBuf1
, szDummyBytes
, RECV_BUF
), "not equal\n");
52 /* Connect to "www.reactos.org" */
53 if (!ConnectToReactOSWebsite(sck
))
55 ok(0, "ConnectToReactOSWebsite failed. Aborting test.\n");
59 /* Send the GET request */
60 if (!GetRequestAndWait(sck
))
62 ok(0, "GetRequestAndWait failed. Aborting test.\n");
67 MSG_PEEK will not change the internal number of bytes read, so that a subsequent request should return the same bytes again. */
68 SCKTEST(recv(sck
, szBuf1
, RECV_BUF
, MSG_PEEK
));
69 SCKTEST(recv(sck
, szBuf2
, RECV_BUF
, 0));
70 ok(!memcmp(szBuf1
, szBuf2
, RECV_BUF
), "not equal\n");
72 /* The last recv() call moved the internal file pointer, so that the next request should return different data. */
73 SCKTEST(recv(sck
, szBuf1
, RECV_BUF
, 0));
74 ok(memcmp(szBuf1
, szBuf2
, RECV_BUF
), "equal\n");