From b59f0f14827d99d9e919fd503cacec9fbdd0df1f Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Tue, 6 Mar 2012 01:43:46 -0800 Subject: [PATCH] Make mosh-server exit if there's no connection within 60 seconds Fixes #30 github issue. --- src/frontend/mosh-server.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/frontend/mosh-server.cc b/src/frontend/mosh-server.cc index 32b38e6..f355e8a 100644 --- a/src/frontend/mosh-server.cc +++ b/src/frontend/mosh-server.cc @@ -247,7 +247,13 @@ void serve( int host_fd, Terminal::Complete &terminal, ServerConnection &network try { uint64_t now = Network::timestamp(); - int active_fds = poll( pollfds, 3, min( network.wait_time(), terminal.wait_time( now ) ) ); + const int timeout_if_no_client = 60000; + int poll_timeout = min( network.wait_time(), terminal.wait_time( now ) ); + if ( !network.has_remote_addr() ) { + poll_timeout = min( poll_timeout, timeout_if_no_client ); + } + + int active_fds = poll( pollfds, 3, poll_timeout ); if ( active_fds < 0 ) { perror( "poll" ); break; @@ -411,6 +417,13 @@ void serve( int host_fd, Terminal::Complete &terminal, ServerConnection &network } } + if ( !network.has_remote_addr() + && time_since_remote_state >= uint64_t( timeout_if_no_client ) ) { + fprintf( stderr, "No connection within %d seconds.\n", + timeout_if_no_client / 1000 ); + break; + } + network.tick(); } catch ( Network::NetworkException e ) { fprintf( stderr, "%s: %s\n", e.function.c_str(), strerror( e.the_errno ) );