📄 accept.c
字号:
timeoutTime); switch(clientAction) { case CLIENT_TIMEOUT_ACCEPT: TEST_ASSERT(clientSock == 0); TEST_ASSERT(PR_GetError() == PR_IO_TIMEOUT_ERROR); break; case CLIENT_NORMAL: TEST_ASSERT(clientSock); bytesRead = PR_Recv(clientSock, buf, CLIENT_DATA, 0, timeoutTime); TEST_ASSERT(bytesRead == CLIENT_DATA); break; case CLIENT_TIMEOUT_SEND: TEST_ASSERT(clientSock); bytesRead = PR_Recv(clientSock, buf, CLIENT_DATA, 0, timeoutTime); TEST_ASSERT(bytesRead == -1); TEST_ASSERT(PR_GetError() == PR_IO_TIMEOUT_ERROR); break; } break; case ACCEPT_READ: status = PR_AcceptRead(listenSock, &clientSock, &raddr, buf, CLIENT_DATA, timeoutTime); switch(clientAction) { case CLIENT_TIMEOUT_ACCEPT: /* Invalid test case */ TEST_ASSERT(0); break; case CLIENT_NORMAL: TEST_ASSERT(clientSock); TEST_ASSERT(status == CLIENT_DATA); break; case CLIENT_TIMEOUT_SEND: TEST_ASSERT(status == -1); TEST_ASSERT(PR_GetError() == PR_IO_TIMEOUT_ERROR); break; } break;#ifdef WINNT case ACCEPT_FAST: clientSock = PR_NTFast_Accept(listenSock, &clientAddr, timeoutTime); switch(clientAction) { case CLIENT_TIMEOUT_ACCEPT: TEST_ASSERT(clientSock == 0); if (debug_mode) PR_fprintf(output, "PR_GetError is %ld\n", PR_GetError()); TEST_ASSERT(PR_GetError() == PR_IO_TIMEOUT_ERROR); break; case CLIENT_NORMAL: TEST_ASSERT(clientSock); bytesRead = PR_Recv(clientSock, buf, CLIENT_DATA, 0, timeoutTime); TEST_ASSERT(bytesRead == CLIENT_DATA); break; case CLIENT_TIMEOUT_SEND: TEST_ASSERT(clientSock); bytesRead = PR_Recv(clientSock, buf, CLIENT_DATA, 0, timeoutTime); TEST_ASSERT(bytesRead == -1); TEST_ASSERT(PR_GetError() == PR_IO_TIMEOUT_ERROR); break; } break; break; case ACCEPT_READ_FAST: status = PR_NTFast_AcceptRead(listenSock, &clientSock, &raddr, buf, 4096, timeoutTime); switch(clientAction) { case CLIENT_TIMEOUT_ACCEPT: /* Invalid test case */ TEST_ASSERT(0); break; case CLIENT_NORMAL: TEST_ASSERT(clientSock); TEST_ASSERT(status == CLIENT_DATA); break; case CLIENT_TIMEOUT_SEND: TEST_ASSERT(clientSock == NULL); TEST_ASSERT(status == -1); TEST_ASSERT(PR_GetError() == PR_IO_TIMEOUT_ERROR); break; } break; case ACCEPT_READ_FAST_CB: status = PR_NTFast_AcceptRead_WithTimeoutCallback( listenSock, &clientSock, &raddr, buf, 4096, timeoutTime, timeout_callback, (void *)CALLBACK_MAGIC); switch(clientAction) { case CLIENT_TIMEOUT_ACCEPT: /* Invalid test case */ TEST_ASSERT(0); break; case CLIENT_NORMAL: TEST_ASSERT(clientSock); TEST_ASSERT(status == CLIENT_DATA); break; case CLIENT_TIMEOUT_SEND: if (debug_mode) PR_fprintf(output, "clientSock = 0x%8.8lx\n", clientSock); TEST_ASSERT(clientSock == NULL); TEST_ASSERT(status == -1); TEST_ASSERT(PR_GetError() == PR_IO_TIMEOUT_ERROR); break; } break;#endif } if (clientSock != NULL) { PR_Close(clientSock); clientSock = NULL; } } PR_Close(listenSock); PR_JoinThread(clientThread);}void AcceptUpdatedTest(void){ RunTest(ACCEPT_NORMAL, CLIENT_NORMAL); }void AcceptNotUpdatedTest(void){ RunTest(ACCEPT_FAST, CLIENT_NORMAL); }void AcceptReadTest(void){ RunTest(ACCEPT_READ, CLIENT_NORMAL); }void AcceptReadNotUpdatedTest(void){ RunTest(ACCEPT_READ_FAST, CLIENT_NORMAL); }void AcceptReadCallbackTest(void){ RunTest(ACCEPT_READ_FAST_CB, CLIENT_NORMAL); }void TimeoutAcceptUpdatedTest(void){ RunTest(ACCEPT_NORMAL, CLIENT_TIMEOUT_ACCEPT); }void TimeoutAcceptNotUpdatedTest(void){ RunTest(ACCEPT_FAST, CLIENT_TIMEOUT_ACCEPT); }void TimeoutAcceptReadCallbackTest(void){ RunTest(ACCEPT_READ_FAST_CB, CLIENT_TIMEOUT_ACCEPT); }void TimeoutReadUpdatedTest(void){ RunTest(ACCEPT_NORMAL, CLIENT_TIMEOUT_SEND); }void TimeoutReadNotUpdatedTest(void){ RunTest(ACCEPT_FAST, CLIENT_TIMEOUT_SEND); }void TimeoutReadReadTest(void){ RunTest(ACCEPT_READ, CLIENT_TIMEOUT_SEND); }void TimeoutReadReadNotUpdatedTest(void){ RunTest(ACCEPT_READ_FAST, CLIENT_TIMEOUT_SEND); }void TimeoutReadReadCallbackTest(void){ RunTest(ACCEPT_READ_FAST_CB, CLIENT_TIMEOUT_SEND); }/************************************************************************/static void Measure(void (*func)(void), const char *msg){ PRIntervalTime start, stop; double d; start = PR_IntervalNow(); (*func)(); stop = PR_IntervalNow(); d = (double)PR_IntervalToMicroseconds(stop - start); if (debug_mode) PR_fprintf(output, "%40s: %6.2f usec\n", msg, d / count);}int main(int argc, char **argv){ /* The command line argument: -d is used to determine if the test is being run in debug mode. The regress tool requires only one line output:PASS or FAIL. All of the printfs associated with this test has been handled with a if (debug_mode) test. Usage: test_name [-d] [-c n] */ PLOptStatus os; PLOptState *opt = PL_CreateOptState(argc, argv, "Gdc:"); while (PL_OPT_EOL != (os = PL_GetNextOpt(opt))) { if (PL_OPT_BAD == os) continue; switch (opt->option) { case 'G': /* global threads */ thread_scope = PR_GLOBAL_THREAD; break; case 'd': /* debug mode */ debug_mode = 1; break; case 'c': /* loop counter */ count = atoi(opt->value); break; default: break; } } PL_DestroyOptState(opt); PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0); output = PR_STDERR; PR_STDIO_INIT();#ifdef XP_MAC SetupMacPrintfLog("accept.log"); debug_mode = 1;#endif timeoutTime = PR_SecondsToInterval(TIMEOUTSECS); if (debug_mode) PR_fprintf(output, "\nRun accept() sucessful connection tests\n"); Measure(AcceptUpdatedTest, "PR_Accept()"); Measure(AcceptReadTest, "PR_AcceptRead()");#ifdef WINNT Measure(AcceptNotUpdatedTest, "PR_NTFast_Accept()"); Measure(AcceptReadNotUpdatedTest, "PR_NTFast_AcceptRead()"); Measure(AcceptReadCallbackTest, "PR_NTFast_AcceptRead_WithTimeoutCallback()");#endif if (debug_mode) PR_fprintf(output, "\nRun accept() timeout in the accept tests\n");#ifdef WINNT Measure(TimeoutReadReadCallbackTest, "PR_NTFast_AcceptRead_WithTimeoutCallback()");#endif Measure(TimeoutReadUpdatedTest, "PR_Accept()"); if (debug_mode) PR_fprintf(output, "\nRun accept() timeout in the read tests\n"); Measure(TimeoutReadReadTest, "PR_AcceptRead()");#ifdef WINNT Measure(TimeoutReadNotUpdatedTest, "PR_NTFast_Accept()"); Measure(TimeoutReadReadNotUpdatedTest, "PR_NTFast_AcceptRead()"); Measure(TimeoutReadReadCallbackTest, "PR_NTFast_AcceptRead_WithTimeoutCallback()");#endif PR_fprintf(output, "%s\n", (failed_already) ? "FAIL" : "PASS"); return failed_already;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -