handle signal soon; #179
This commit is contained in:
parent
e43520da58
commit
380a646f09
3 changed files with 16 additions and 15 deletions
|
@ -206,9 +206,10 @@ class EventLoop(object):
|
|||
events = self.poll(1)
|
||||
except (OSError, IOError) as e:
|
||||
if errno_from_exception(e) in (errno.EPIPE, errno.EINTR):
|
||||
# Happens when the client closes the connection
|
||||
# EPIPE: Happens when the client closes the connection
|
||||
# EINTR: Happens when received a signal
|
||||
# handles them as soon as possible
|
||||
logging.debug('poll:%s', e)
|
||||
continue
|
||||
else:
|
||||
logging.error('poll:%s', e)
|
||||
import traceback
|
||||
|
|
|
@ -632,14 +632,14 @@ class TCPRelay(object):
|
|||
if now - self._last_time > TIMEOUT_PRECISION:
|
||||
self._sweep_timeout()
|
||||
self._last_time = now
|
||||
if self._closed:
|
||||
if self._server_socket:
|
||||
self._eventloop.remove(self._server_socket)
|
||||
self._server_socket.close()
|
||||
self._server_socket = None
|
||||
logging.info('closed listen port %d', self._listen_port)
|
||||
if not self._fd_to_handlers:
|
||||
self._eventloop.remove_handler(self._handle_events)
|
||||
if self._closed:
|
||||
if self._server_socket:
|
||||
self._eventloop.remove(self._server_socket)
|
||||
self._server_socket.close()
|
||||
self._server_socket = None
|
||||
logging.info('closed listen port %d', self._listen_port)
|
||||
if not self._fd_to_handlers:
|
||||
self._eventloop.remove_handler(self._handle_events)
|
||||
|
||||
def close(self, next_tick=False):
|
||||
self._closed = True
|
||||
|
|
|
@ -264,11 +264,11 @@ class UDPRelay(object):
|
|||
self._cache.sweep()
|
||||
self._client_fd_to_server_addr.sweep()
|
||||
self._last_time = now
|
||||
if self._closed:
|
||||
self._server_socket.close()
|
||||
for sock in self._sockets:
|
||||
sock.close()
|
||||
self._eventloop.remove_handler(self._handle_events)
|
||||
if self._closed:
|
||||
self._server_socket.close()
|
||||
for sock in self._sockets:
|
||||
sock.close()
|
||||
self._eventloop.remove_handler(self._handle_events)
|
||||
|
||||
def close(self, next_tick=False):
|
||||
self._closed = True
|
||||
|
|
Loading…
Reference in a new issue