my $exit_requested = 0; local $SIG{ INT } = sub { ++$exit_requested; }; local $SIG{ TERM } = sub { ++$exit_requested; }; while ( !$exit_requested ) { my $client_sock = $server->accept(); if ( !$client_sock ) { next if $!${ EINTR }; die( "accept: $!\n" ); } ... }