9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync#include <iprt/tcp.h>
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync#include <iprt/string.h>
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync#include <iprt/test.h>
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync/*******************************************************************************
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync* Global Variables *
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync*******************************************************************************/
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsyncstatic RTTEST g_hTest;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync/* * * * * * * * Test 3 * * * * * * * */
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsyncstatic DECLCALLBACK(int) test3Server(RTSOCKET hSocket, void *pvUser)
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync{
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTestSetDefault(g_hTest, NULL);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync char szBuf[4096];
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync /* say hello */
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "hello\n", sizeof("hello\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RT_ZERO(szBuf);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("dude!\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync szBuf[sizeof("dude!\n") - 1] = '\0';
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "dude!\n") == 0, VERR_TCP_SERVER_STOP);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync /* Send ~20 MB of data that the client receives while trying to disconnect. */
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RT_ZERO(szBuf);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync size_t cbSent = 0;
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync while (cbSent < 20 * _1M)
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync {
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, szBuf, sizeof(szBuf)), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync cbSent += sizeof(szBuf);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync }
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync return VERR_TCP_SERVER_STOP;
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync}
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsyncvoid test3()
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync{
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTestSub(g_hTest, "Graceful disconnect");
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync uint32_t cStartErrors = RTTestErrorCount(g_hTest);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync for (unsigned i = 0; i < 100 && cStartErrors == RTTestErrorCount(g_hTest); i++)
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync {
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync PRTTCPSERVER pServer;
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync int rc = RTTcpServerCreate("localhost", 9999, RTTHREADTYPE_DEFAULT, "server-2", test3Server, NULL, &pServer);
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync#ifdef RT_OS_SOLARIS
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync /** @todo testboxsh1 occationally hits this for some stupid reason. i=21 in
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync * one occurrence. Fudge a bit for now and see if it helps. */
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync if (rc == VERR_NET_ADDRESS_IN_USE)
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync {
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync RTThreadSleep(500);
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync rc = RTTcpServerCreate("localhost", 9999, RTTHREADTYPE_DEFAULT, "server-2", test3Server, NULL, &pServer);
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync }
e99cdffa1ee7d0d0451908d60a5d2faa124f14e9vboxsync#endif
a5c7010d7b20deb9d71dbdc64bb34fdb16ea1124vboxsync if (rc != VINF_SUCCESS)
a5c7010d7b20deb9d71dbdc64bb34fdb16ea1124vboxsync {
a5c7010d7b20deb9d71dbdc64bb34fdb16ea1124vboxsync RTTestIFailed("RTTcpServerCreate -> %Rrc, i=%d", rc, i);
a5c7010d7b20deb9d71dbdc64bb34fdb16ea1124vboxsync return;
a5c7010d7b20deb9d71dbdc64bb34fdb16ea1124vboxsync }
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTSOCKET hSocket;
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC(rc = RTTcpClientConnect("localhost", 9999, &hSocket), VINF_SUCCESS);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync if (RT_SUCCESS(rc))
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync {
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync char szBuf[512];
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RT_ZERO(szBuf);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync do /* break non-loop */
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync {
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC_BREAK(RTTcpRead(hSocket, szBuf, sizeof("hello\n") - 1, NULL), VINF_SUCCESS);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_BREAK(strcmp(szBuf, "hello\n") == 0);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC_BREAK(RTTcpWrite(hSocket, "dude!\n", sizeof("dude!\n") - 1), VINF_SUCCESS);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync } while (0);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC(RTTcpClientClose(hSocket), VINF_SUCCESS);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync }
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync RTTESTI_CHECK_RC(RTTcpServerDestroy(pServer), VINF_SUCCESS);
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync }
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync}
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync/* * * * * * * * Test 2 * * * * * * * */
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsyncstatic DECLCALLBACK(int) test2Server(RTSOCKET hSocket, void *pvUser)
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync{
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTestSetDefault(g_hTest, NULL);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync char szBuf[512];
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync /* say hello */
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "hello\n", sizeof("hello\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RT_ZERO(szBuf);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("dude!\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync szBuf[sizeof("dude!\n") - 1] = '\0';
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "dude!\n") == 0, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync /* wait for a goodbye which doesn't arrive. */
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RT_ZERO(szBuf);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("byebye\n") - 1, NULL), VERR_NET_SHUTDOWN, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync return VERR_TCP_SERVER_STOP;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync}
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsyncvoid test2()
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync{
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTestSub(g_hTest, "Rude client");
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync PRTTCPSERVER pServer;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RETV(RTTcpServerCreate("localhost", 9999, RTTHREADTYPE_DEFAULT, "server-2",
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync test2Server, NULL, &pServer), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync int rc;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTSOCKET hSocket;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC(rc = RTTcpClientConnect("localhost", 9999, &hSocket), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync if (RT_SUCCESS(rc))
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync {
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync char szBuf[512];
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RT_ZERO(szBuf);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync do /* break non-loop */
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync {
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_BREAK(RTTcpRead(hSocket, szBuf, sizeof("hello\n") - 1, NULL), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_BREAK(strcmp(szBuf, "hello\n") == 0);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_BREAK(RTTcpWrite(hSocket, "dude!\n", sizeof("dude!\n") - 1), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync } while (0);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC(RTTcpClientClose(hSocket), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync }
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC(RTTcpServerDestroy(pServer), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync}
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync/* * * * * * * * Test 1 * * * * * * * */
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsyncstatic DECLCALLBACK(int) test1Server(RTSOCKET hSocket, void *pvUser)
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync{
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTestSetDefault(g_hTest, NULL);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync char szBuf[512];
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RET(pvUser == NULL, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync /* say hello */
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "hello\n", sizeof("hello\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("dude!\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync szBuf[sizeof("dude!\n") - 1] = '\0';
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "dude!\n") == 0, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync /* say goodbye */
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RET(RTTcpRead(hSocket, szBuf, sizeof("byebye\n") - 1, NULL), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync szBuf[sizeof("byebye\n") - 1] = '\0';
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RET(strcmp(szBuf, "byebye\n") == 0, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RET(RTTcpWrite(hSocket, "bye\n", sizeof("bye\n") - 1), VINF_SUCCESS, VERR_TCP_SERVER_STOP);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync return VERR_TCP_SERVER_STOP;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync}
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsyncvoid test1()
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync{
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTestSub(g_hTest, "Simple server-client setup");
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync PRTTCPSERVER pServer;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_RETV(RTTcpServerCreate("localhost", 9999, RTTHREADTYPE_DEFAULT, "server-1",
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync test1Server, NULL, &pServer), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync int rc;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTSOCKET hSocket;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC(rc = RTTcpClientConnect("localhost", 9999, &hSocket), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync if (RT_SUCCESS(rc))
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync {
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync do /* break non-loop */
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync {
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync char szBuf[512];
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RT_ZERO(szBuf);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_BREAK(RTTcpRead(hSocket, szBuf, sizeof("hello\n") - 1, NULL), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_BREAK(strcmp(szBuf, "hello\n") == 0);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_BREAK(RTTcpWrite(hSocket, "dude!\n", sizeof("dude!\n") - 1), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_BREAK(RTTcpWrite(hSocket, "byebye\n", sizeof("byebye\n") - 1), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RT_ZERO(szBuf);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC_BREAK(RTTcpRead(hSocket, szBuf, sizeof("bye\n") - 1, NULL), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_BREAK(strcmp(szBuf, "bye\n") == 0);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync } while (0);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC(RTTcpClientClose(hSocket), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync }
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTESTI_CHECK_RC(RTTcpServerDestroy(pServer), VINF_SUCCESS);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync}
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsyncint main()
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync{
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTEXITCODE rcExit = RTTestInitAndCreate("tstRTTcp-1", &g_hTest);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync if (rcExit != RTEXITCODE_SUCCESS)
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync return rcExit;
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync RTTestBanner(g_hTest);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync test1();
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync test2();
b34bbc1afcc3a1d2bfbb9814f95a965abd8563e2vboxsync test3();
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync /** @todo test the full RTTcp API. */
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync return RTTestSummaryAndDestroy(g_hTest);
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync}
9a24efbe4defba67d7fd702128f4afd13efd7b8bvboxsync