📄 testpoll.c
字号:
recv_msg(s, LARGE_NUM_SOCKETS - 1, p, tc); rv = apr_poll(pollarray_large, LARGE_NUM_SOCKETS, &lrv, 2 * APR_USEC_PER_SEC); CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv)); for (i = 0; i < LARGE_NUM_SOCKETS; i++) { check_sockets(pollarray_large, s, i, 0, tc); }}static void setup_pollset(CuTest *tc){ apr_status_t rv; rv = apr_pollset_create(&pollset, LARGE_NUM_SOCKETS, p, 0); CuAssertIntEquals(tc, APR_SUCCESS, rv);}static void add_sockets_pollset(CuTest *tc){ apr_status_t rv; int i; for (i = 0; i < LARGE_NUM_SOCKETS;i++){ apr_pollfd_t socket_pollfd; CuAssertPtrNotNull(tc, s[i]); socket_pollfd.desc_type = APR_POLL_SOCKET; socket_pollfd.reqevents = APR_POLLIN; socket_pollfd.desc.s = s[i]; socket_pollfd.client_data = s[i]; rv = apr_pollset_add(pollset, &socket_pollfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); }}static void nomessage_pollset(CuTest *tc){ apr_status_t rv; int lrv; const apr_pollfd_t *descs = NULL; rv = apr_pollset_poll(pollset, 0, &lrv, &descs); CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv)); CuAssertIntEquals(tc, 0, lrv); CuAssertPtrEquals(tc, NULL, descs);}static void send0_pollset(CuTest *tc){ apr_status_t rv; const apr_pollfd_t *descs = NULL; int num; send_msg(s, sa, 0, tc); rv = apr_pollset_poll(pollset, 0, &num, &descs); CuAssertIntEquals(tc, APR_SUCCESS, rv); CuAssertIntEquals(tc, 1, num); CuAssertPtrNotNull(tc, descs); CuAssertPtrEquals(tc, s[0], descs[0].desc.s); CuAssertPtrEquals(tc, s[0], descs[0].client_data);}static void recv0_pollset(CuTest *tc){ apr_status_t rv; int lrv; const apr_pollfd_t *descs = NULL; recv_msg(s, 0, p, tc); rv = apr_pollset_poll(pollset, 0, &lrv, &descs); CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv)); CuAssertIntEquals(tc, 0, lrv); CuAssertPtrEquals(tc, NULL, descs);}static void send_middle_pollset(CuTest *tc){ apr_status_t rv; const apr_pollfd_t *descs = NULL; int num; send_msg(s, sa, 2, tc); send_msg(s, sa, 5, tc); rv = apr_pollset_poll(pollset, 0, &num, &descs); CuAssertIntEquals(tc, APR_SUCCESS, rv); CuAssertIntEquals(tc, 2, num); CuAssertPtrNotNull(tc, descs); CuAssert(tc, "Incorrect socket in result set", ((descs[0].desc.s == s[2]) && (descs[1].desc.s == s[5])) || ((descs[0].desc.s == s[5]) && (descs[1].desc.s == s[2])));}static void clear_middle_pollset(CuTest *tc){ apr_status_t rv; int lrv; const apr_pollfd_t *descs = NULL; recv_msg(s, 2, p, tc); recv_msg(s, 5, p, tc); rv = apr_pollset_poll(pollset, 0, &lrv, &descs); CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv)); CuAssertIntEquals(tc, 0, lrv); CuAssertPtrEquals(tc, NULL, descs);}static void send_last_pollset(CuTest *tc){ apr_status_t rv; const apr_pollfd_t *descs = NULL; int num; send_msg(s, sa, LARGE_NUM_SOCKETS - 1, tc); rv = apr_pollset_poll(pollset, 0, &num, &descs); CuAssertIntEquals(tc, APR_SUCCESS, rv); CuAssertIntEquals(tc, 1, num); CuAssertPtrNotNull(tc, descs); CuAssertPtrEquals(tc, s[LARGE_NUM_SOCKETS - 1], descs[0].desc.s); CuAssertPtrEquals(tc, s[LARGE_NUM_SOCKETS - 1], descs[0].client_data);}static void clear_last_pollset(CuTest *tc){ apr_status_t rv; int lrv; const apr_pollfd_t *descs = NULL; recv_msg(s, LARGE_NUM_SOCKETS - 1, p, tc); rv = apr_pollset_poll(pollset, 0, &lrv, &descs); CuAssertIntEquals(tc, 1, APR_STATUS_IS_TIMEUP(rv)); CuAssertIntEquals(tc, 0, lrv); CuAssertPtrEquals(tc, NULL, descs);}static void close_all_sockets(CuTest *tc){ apr_status_t rv; int i; for (i = 0; i < LARGE_NUM_SOCKETS; i++){ rv = apr_socket_close(s[i]); CuAssertIntEquals(tc, APR_SUCCESS, rv); }}static void pollset_remove(CuTest *tc){ apr_status_t rv; apr_pollset_t *pollset; const apr_pollfd_t *hot_files; apr_pollfd_t pfd; apr_int32_t num; rv = apr_pollset_create(&pollset, 5, p, 0); CuAssertIntEquals(tc, APR_SUCCESS, rv); pfd.p = p; pfd.desc_type = APR_POLL_SOCKET; pfd.reqevents = APR_POLLOUT; pfd.desc.s = s[0]; pfd.client_data = (void *)1; rv = apr_pollset_add(pollset, &pfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); pfd.desc.s = s[1]; pfd.client_data = (void *)2; rv = apr_pollset_add(pollset, &pfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); pfd.desc.s = s[2]; pfd.client_data = (void *)3; rv = apr_pollset_add(pollset, &pfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); pfd.desc.s = s[1]; pfd.client_data = (void *)4; rv = apr_pollset_add(pollset, &pfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); pfd.desc.s = s[3]; pfd.client_data = (void *)5; rv = apr_pollset_add(pollset, &pfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); rv = apr_pollset_poll(pollset, 1000, &num, &hot_files); CuAssertIntEquals(tc, APR_SUCCESS, rv); CuAssertIntEquals(tc, 5, num); /* now remove the pollset elements referring to desc s[1] */ pfd.desc.s = s[1]; pfd.client_data = (void *)999; /* not used on this call */ rv = apr_pollset_remove(pollset, &pfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); /* this time only three should match */ rv = apr_pollset_poll(pollset, 1000, &num, &hot_files); CuAssertIntEquals(tc, APR_SUCCESS, rv); CuAssertIntEquals(tc, 3, num); CuAssertPtrEquals(tc, (void *)1, hot_files[0].client_data); CuAssertPtrEquals(tc, s[0], hot_files[0].desc.s); CuAssertPtrEquals(tc, (void *)3, hot_files[1].client_data); CuAssertPtrEquals(tc, s[2], hot_files[1].desc.s); CuAssertPtrEquals(tc, (void *)5, hot_files[2].client_data); CuAssertPtrEquals(tc, s[3], hot_files[2].desc.s); /* now remove the pollset elements referring to desc s[2] */ pfd.desc.s = s[2]; pfd.client_data = (void *)999; /* not used on this call */ rv = apr_pollset_remove(pollset, &pfd); CuAssertIntEquals(tc, APR_SUCCESS, rv); /* this time only two should match */ rv = apr_pollset_poll(pollset, 1000, &num, &hot_files); CuAssertIntEquals(tc, APR_SUCCESS, rv); CuAssertIntEquals(tc, 2, num); CuAssertPtrEquals(tc, (void *)1, hot_files[0].client_data); CuAssertPtrEquals(tc, s[0], hot_files[0].desc.s); CuAssertPtrEquals(tc, (void *)5, hot_files[1].client_data); CuAssertPtrEquals(tc, s[3], hot_files[1].desc.s);}CuSuite *testpoll(void){ CuSuite *suite = CuSuiteNew("Poll"); SUITE_ADD_TEST(suite, create_all_sockets); SUITE_ADD_TEST(suite, setup_small_poll); SUITE_ADD_TEST(suite, setup_large_poll); SUITE_ADD_TEST(suite, nomessage); SUITE_ADD_TEST(suite, send_2); SUITE_ADD_TEST(suite, recv_2_send_1); SUITE_ADD_TEST(suite, send_2_signaled_1); SUITE_ADD_TEST(suite, recv_1_send_0); SUITE_ADD_TEST(suite, clear_all_signalled); SUITE_ADD_TEST(suite, send_large_pollarray); SUITE_ADD_TEST(suite, recv_large_pollarray); SUITE_ADD_TEST(suite, setup_pollset); SUITE_ADD_TEST(suite, add_sockets_pollset); SUITE_ADD_TEST(suite, nomessage_pollset); SUITE_ADD_TEST(suite, send0_pollset); SUITE_ADD_TEST(suite, recv0_pollset); SUITE_ADD_TEST(suite, send_middle_pollset); SUITE_ADD_TEST(suite, clear_middle_pollset); SUITE_ADD_TEST(suite, send_last_pollset); SUITE_ADD_TEST(suite, clear_last_pollset); SUITE_ADD_TEST(suite, pollset_remove); SUITE_ADD_TEST(suite, close_all_sockets); return suite;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -