catch sys exception & close port
This commit is contained in:
parent
ce189ecd85
commit
7ccee594d5
1 changed files with 15 additions and 4 deletions
|
@ -108,8 +108,13 @@ class TCPRelayHandler(object):
|
|||
# if is_local, this is sslocal
|
||||
self._is_local = is_local
|
||||
self._stage = STAGE_INIT
|
||||
try:
|
||||
self._encryptor = encrypt.Encryptor(config['password'],
|
||||
config['method'])
|
||||
except Exception:
|
||||
self._stage = STAGE_DESTROYED
|
||||
logging.error('creater encryptor fail at port %d', server._listen_port)
|
||||
return
|
||||
self._encrypt_correct = True
|
||||
self._obfs = obfs.obfs(config['obfs'])
|
||||
server_info = obfs.server_info(server.obfs_data)
|
||||
|
@ -149,6 +154,7 @@ class TCPRelayHandler(object):
|
|||
self._upstream_status = WAIT_STATUS_READING
|
||||
self._downstream_status = WAIT_STATUS_INIT
|
||||
self._client_address = local_sock.getpeername()[:2]
|
||||
self._accept_address = local_sock.getsockname()[:2]
|
||||
self._remote_address = None
|
||||
if 'forbidden_ip' in config:
|
||||
self._forbidden_iplist = config['forbidden_ip']
|
||||
|
@ -530,7 +536,7 @@ class TCPRelayHandler(object):
|
|||
elif self._bindv6 and af == socket.AF_INET6:
|
||||
bind_addr = self._bindv6
|
||||
else:
|
||||
bind_addr = self._local_sock.getsockname()[0]
|
||||
bind_addr = self._accept_address[0]
|
||||
|
||||
bind_addr = bind_addr.replace("::ffff:", "")
|
||||
if bind_addr in self._ignore_bind_list:
|
||||
|
@ -816,6 +822,9 @@ class TCPRelayHandler(object):
|
|||
logging.error('%s when handling connection from %s:%d' %
|
||||
(e, self._client_address[0], self._client_address[1]))
|
||||
|
||||
def stage(self):
|
||||
return self._stage
|
||||
|
||||
def destroy(self):
|
||||
# destroy the handler and release any resources
|
||||
# promises:
|
||||
|
@ -1005,9 +1014,11 @@ class TCPRelay(object):
|
|||
try:
|
||||
logging.debug('accept')
|
||||
conn = self._server_socket.accept()
|
||||
TCPRelayHandler(self, self._fd_to_handlers,
|
||||
handler = TCPRelayHandler(self, self._fd_to_handlers,
|
||||
self._eventloop, conn[0], self._config,
|
||||
self._dns_resolver, self._is_local)
|
||||
if handler.stage() == STAGE_DESTROYED:
|
||||
conn[0].close()
|
||||
except (OSError, IOError) as e:
|
||||
error_no = eventloop.errno_from_exception(e)
|
||||
if error_no in (errno.EAGAIN, errno.EINPROGRESS,
|
||||
|
|
Loading…
Add table
Reference in a new issue