diff options
author | Haavard <havardpe@yahoo-inc.com> | 2017-04-21 21:24:52 +0000 |
---|---|---|
committer | Haavard <havardpe@yahoo-inc.com> | 2017-04-21 21:24:52 +0000 |
commit | e4af2d77fd9538c6e683f934459fcdc6cb1d3207 (patch) | |
tree | 88dba8dc8e951f46d7ac66dcdc3526f7c108bf06 /vespalib | |
parent | bbf11af22fff91b6f8f757a252ee4255bd018166 (diff) |
handle sig int in separate thread
this is needed since socket handle now masks all signals
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/tests/net/socket/socket_server.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/vespalib/src/tests/net/socket/socket_server.cpp b/vespalib/src/tests/net/socket/socket_server.cpp index c14c69caa70..b6af5fa120b 100644 --- a/vespalib/src/tests/net/socket/socket_server.cpp +++ b/vespalib/src/tests/net/socket/socket_server.cpp @@ -38,6 +38,14 @@ void write_msg(SocketHandle &socket, const vespalib::string &msg) { } } +void kill_func() { + while (!SignalHandler::INT.check()) { + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + fprintf(stderr, "exiting...\n"); + kill(getpid(), SIGTERM); +} + int main(int, char **) { ServerSocket server(0); if (!server.valid()) { @@ -57,7 +65,8 @@ int main(int, char **) { HostName::get().c_str(), server.address().port()); fprintf(stderr, "use ^C (SIGINT) to exit\n"); SignalHandler::INT.hook(); - while (!SignalHandler::INT.check()) { + std::thread kill_thread(kill_func); + for (;;) { SocketHandle socket = server.accept(); if (socket.valid()) { fprintf(stderr, "got connection from: %s (local address: %s)\n", |