Make server shutdown more robust
This commit is contained in:
+20
-2
@@ -231,7 +231,16 @@ void serve( int host_fd )
|
|||||||
|
|
||||||
if ( pollfds[ 2 ].revents & POLLIN ) {
|
if ( pollfds[ 2 ].revents & POLLIN ) {
|
||||||
/* shutdown signal */
|
/* shutdown signal */
|
||||||
if ( network.attached() ) {
|
struct signalfd_siginfo the_siginfo;
|
||||||
|
ssize_t bytes_read = read( pollfds[ 2 ].fd, &the_siginfo, sizeof( the_siginfo ) );
|
||||||
|
if ( bytes_read == 0 ) {
|
||||||
|
break;
|
||||||
|
} else if ( bytes_read < 0 ) {
|
||||||
|
perror( "read" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( network.attached() && (!network.shutdown_in_progress()) ) {
|
||||||
network.start_shutdown();
|
network.start_shutdown();
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
@@ -247,7 +256,11 @@ void serve( int host_fd )
|
|||||||
if ( (pollfds[ 1 ].revents)
|
if ( (pollfds[ 1 ].revents)
|
||||||
& (POLLERR | POLLHUP | POLLNVAL) ) {
|
& (POLLERR | POLLHUP | POLLNVAL) ) {
|
||||||
/* host problem */
|
/* host problem */
|
||||||
network.start_shutdown();
|
if ( network.attached() && (!network.shutdown_in_progress()) ) {
|
||||||
|
network.start_shutdown();
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* quit if our shutdown has been acknowledged */
|
/* quit if our shutdown has been acknowledged */
|
||||||
@@ -255,6 +268,11 @@ void serve( int host_fd )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* quit after shutdown acknowledgement timeout */
|
||||||
|
if ( network.shutdown_in_progress() && network.shutdown_ack_timed_out() ) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* quit if we received and acknowledged a shutdown request */
|
/* quit if we received and acknowledged a shutdown request */
|
||||||
if ( network.counterparty_shutdown_ack_sent() ) {
|
if ( network.counterparty_shutdown_ack_sent() ) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user