diff --git a/shadowsocks/eventloop.py b/shadowsocks/eventloop.py index d2bbeb6..341620e 100644 --- a/shadowsocks/eventloop.py +++ b/shadowsocks/eventloop.py @@ -176,6 +176,10 @@ class EventLoop(object): del self._fdmap[fd] self._impl.unregister(fd) + def removefd(self, fd): + del self._fdmap[fd] + self._impl.unregister(fd) + def add_periodic(self, callback): self._periodic_callbacks.append(callback) diff --git a/shadowsocks/tcprelay.py b/shadowsocks/tcprelay.py index 414bf43..6ddc531 100644 --- a/shadowsocks/tcprelay.py +++ b/shadowsocks/tcprelay.py @@ -1061,7 +1061,7 @@ class TCPRelayHandler(object): else: logging.warn('unknown socket from %s:%d' % (self._client_address[0], self._client_address[1])) try: - self._loop.remove(sock) + self._loop.removefd(fd) except Exception as e: shell.print_exception(e) try: @@ -1100,7 +1100,7 @@ class TCPRelayHandler(object): if self._remote_sock: logging.debug('destroying remote') try: - self._loop.remove(self._remote_sock) + self._loop.removefd(self._remote_sock_fd) except Exception as e: shell.print_exception(e) try: @@ -1113,7 +1113,7 @@ class TCPRelayHandler(object): if self._remote_sock_v6: logging.debug('destroying remote_v6') try: - self._loop.remove(self._remote_sock_v6) + self._loop.removefd(self._remotev6_sock_fd) except Exception as e: shell.print_exception(e) try: @@ -1126,7 +1126,7 @@ class TCPRelayHandler(object): if self._local_sock: logging.debug('destroying local') try: - self._loop.remove(self._local_sock) + self._loop.removefd(self._local_sock_fd) except Exception as e: shell.print_exception(e) try: @@ -1403,7 +1403,7 @@ class TCPRelay(object): logging.warn('unknown fd') handle = True try: - self._eventloop.remove(sock) + self._eventloop.removefd(fd) except Exception as e: shell.print_exception(e) sock.close()