Loading test/CMakeLists.txt +6 −0 Original line number Diff line number Diff line Loading @@ -297,3 +297,9 @@ else() target_link_libraries(threadpool_bounded_queue_test netplus-static) endif() add_test(NAME threadpool_bounded_queue_test COMMAND threadpool_bounded_queue_test) if(CMAKE_SYSTEM_NAME STREQUAL "Linux") add_executable(socketwait_disconnect_test socketwait_disconnect_test.cpp) target_link_libraries(socketwait_disconnect_test netplus-static) add_test(NAME socketwait_disconnect_test COMMAND socketwait_disconnect_test) endif() test/socketwait_disconnect_test.cpp 0 → 100644 +52 −0 Original line number Diff line number Diff line #include <chrono> #include <iostream> #include <thread> #include <sys/socket.h> #include <unistd.h> #include "eventapi.h" int main() { int fds[2]; if (::socketpair(AF_UNIX, SOCK_STREAM, 0, fds) != 0) return 1; netplus::tcp client(fds[0]); netplus::socketwait wait; if (wait.isDisconnected(client)) { std::cerr << "open socket reported disconnected\n"; ::close(fds[1]); return 1; } const char byte = 'x'; if (::write(fds[1], &byte, 1) != 1 || wait.isDisconnected(client)) { std::cerr << "readable data reported disconnected\n"; ::close(fds[1]); return 1; } char received; if (::read(fds[0], &received, 1) != 1) { ::close(fds[1]); return 1; } if (::shutdown(fds[1], SHUT_WR) != 0) { ::close(fds[1]); return 1; } bool disconnected = false; for (int i = 0; i < 100; ++i) { if (wait.isDisconnected(client)) { disconnected = true; break; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); } ::close(fds[1]); if (!disconnected) { std::cerr << "peer FIN was not detected\n"; return 1; } return 0; } Loading
test/CMakeLists.txt +6 −0 Original line number Diff line number Diff line Loading @@ -297,3 +297,9 @@ else() target_link_libraries(threadpool_bounded_queue_test netplus-static) endif() add_test(NAME threadpool_bounded_queue_test COMMAND threadpool_bounded_queue_test) if(CMAKE_SYSTEM_NAME STREQUAL "Linux") add_executable(socketwait_disconnect_test socketwait_disconnect_test.cpp) target_link_libraries(socketwait_disconnect_test netplus-static) add_test(NAME socketwait_disconnect_test COMMAND socketwait_disconnect_test) endif()
test/socketwait_disconnect_test.cpp 0 → 100644 +52 −0 Original line number Diff line number Diff line #include <chrono> #include <iostream> #include <thread> #include <sys/socket.h> #include <unistd.h> #include "eventapi.h" int main() { int fds[2]; if (::socketpair(AF_UNIX, SOCK_STREAM, 0, fds) != 0) return 1; netplus::tcp client(fds[0]); netplus::socketwait wait; if (wait.isDisconnected(client)) { std::cerr << "open socket reported disconnected\n"; ::close(fds[1]); return 1; } const char byte = 'x'; if (::write(fds[1], &byte, 1) != 1 || wait.isDisconnected(client)) { std::cerr << "readable data reported disconnected\n"; ::close(fds[1]); return 1; } char received; if (::read(fds[0], &received, 1) != 1) { ::close(fds[1]); return 1; } if (::shutdown(fds[1], SHUT_WR) != 0) { ::close(fds[1]); return 1; } bool disconnected = false; for (int i = 0; i < 100; ++i) { if (wait.isDisconnected(client)) { disconnected = true; break; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); } ::close(fds[1]); if (!disconnected) { std::cerr << "peer FIN was not detected\n"; return 1; } return 0; }