tstRTTcp-1.cpp revision a5c7010d7b20deb9d71dbdc64bb34fdb16ea1124
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/*******************************************************************************
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync* Global Variables *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync*******************************************************************************/
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/* * * * * * * * Test 3 * * * * * * * */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncstatic DECLCALLBACK(int) test3Server(RTSOCKET hSocket, void *pvUser)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /* say hello */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "hello\n", sizeof("hello\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("dude!\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "dude!\n") == 0, VERR_TCP_SERVER_STOP);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /* Send ~20 MB of data that the client receives while trying to disconnect. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, szBuf, sizeof(szBuf)), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync for (unsigned i = 0; i < 100 && cStartErrors == RTTestErrorCount(g_hTest); i++)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync int rc = RTTcpServerCreate("localhost", 9999, RTTHREADTYPE_DEFAULT, "server-2",
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTestIFailed("RTTcpServerCreate -> %Rrc, i=%d", rc, i);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC(rc = RTTcpClientConnect("localhost", 9999, &hSocket), VINF_SUCCESS);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync do /* break non-loop */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC_BREAK(RTTcpRead(hSocket, szBuf, sizeof("hello\n") - 1, NULL), VINF_SUCCESS);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_BREAK(strcmp(szBuf, "hello\n") == 0);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC_BREAK(RTTcpWrite(hSocket, "dude!\n", sizeof("dude!\n") - 1), VINF_SUCCESS);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync } while (0);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC(RTTcpClientClose(hSocket), VINF_SUCCESS);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTTESTI_CHECK_RC(RTTcpServerDestroy(pServer), VINF_SUCCESS);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/* * * * * * * * Test 2 * * * * * * * */
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsyncstatic DECLCALLBACK(int) test2Server(RTSOCKET hSocket, void *pvUser)
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync /* say hello */
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "hello\n", sizeof("hello\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("dude!\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "dude!\n") == 0, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync /* wait for a goodbye which doesn't arrive. */
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("byebye\n") - 1, NULL), VERR_NET_SHUTDOWN, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RETV(RTTcpServerCreate("localhost", 9999, RTTHREADTYPE_DEFAULT, "server-2",
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC(rc = RTTcpClientConnect("localhost", 9999, &hSocket), VINF_SUCCESS);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync do /* break non-loop */
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_BREAK(RTTcpRead(hSocket, szBuf, sizeof("hello\n") - 1, NULL), VINF_SUCCESS);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_BREAK(strcmp(szBuf, "hello\n") == 0);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_BREAK(RTTcpWrite(hSocket, "dude!\n", sizeof("dude!\n") - 1), VINF_SUCCESS);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync } while (0);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC(RTTcpClientClose(hSocket), VINF_SUCCESS);
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync RTTESTI_CHECK_RC(RTTcpServerDestroy(pServer), VINF_SUCCESS);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync/* * * * * * * * Test 1 * * * * * * * */
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsyncstatic DECLCALLBACK(int) test1Server(RTSOCKET hSocket, void *pvUser)
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RET(pvUser == NULL, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync /* say hello */
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "hello\n", sizeof("hello\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("dude!\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "dude!\n") == 0, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync /* say goodbye */
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("byebye\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "byebye\n") == 0, VERR_TCP_SERVER_STOP);
d1e6154d21dcc739e31ac7d8b139ee0fdfe60d45vboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "bye\n", sizeof("bye\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync RTTESTI_CHECK_RC_RETV(RTTcpServerCreate("localhost", 9999, RTTHREADTYPE_DEFAULT, "server-1",
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync RTTESTI_CHECK_RC(rc = RTTcpClientConnect("localhost", 9999, &hSocket), VINF_SUCCESS);
int main()
return rcExit;
test1();
test2();
test3();