diff options
-rw-r--r-- | netlib/tcp.py | 21 | ||||
-rw-r--r-- | test/test_tcp.py | 35 |
2 files changed, 38 insertions, 18 deletions
diff --git a/netlib/tcp.py b/netlib/tcp.py index 40bd4bde..556f97ac 100644 --- a/netlib/tcp.py +++ b/netlib/tcp.py @@ -355,20 +355,13 @@ class TCPServer: while not self.__shutdown_request: r, w, e = select.select([self.socket], [], [], poll_interval) if self.socket in r: - try: - request, client_address = self.socket.accept() - except socket.error: - return - try: - t = threading.Thread( - target = self.request_thread, - args = (request, client_address) - ) - t.setDaemon(1) - t.start() - except: - self.handle_error(request, client_address) - request.close() + request, client_address = self.socket.accept() + t = threading.Thread( + target = self.request_thread, + args = (request, client_address) + ) + t.setDaemon(1) + t.start() finally: self.__shutdown_request = False self.__is_shut_down.set() diff --git a/test/test_tcp.py b/test/test_tcp.py index 6ff42072..f12a131b 100644 --- a/test/test_tcp.py +++ b/test/test_tcp.py @@ -20,10 +20,7 @@ class EchoHandler(tcp.BaseHandler): def handle(self): v = self.rfile.readline() - if v.startswith("echo"): - self.wfile.write(v) - elif v.startswith("error"): - raise ValueError("Testing an error.") + self.wfile.write(v) self.wfile.flush() @@ -69,6 +66,35 @@ class TestServer(test.ServerTestBase): assert c.rfile.readline() == testval + +class FinishFailHandler(tcp.BaseHandler): + def handle(self): + v = self.rfile.readline() + self.wfile.write(v) + self.wfile.flush() + o = mock.MagicMock() + self.wfile.close() + self.rfile.close() + self.close = mock.MagicMock(side_effect=socket.error) + + +class TestFinishFail(test.ServerTestBase): + """ + This tests a difficult-to-trigger exception in the .finish() method of + the handler. + """ + handler = FinishFailHandler + def test_disconnect_in_finish(self): + testval = "echo!\n" + c = tcp.TCPClient("127.0.0.1", self.port) + c.connect() + c.wfile.write("foo\n") + c.wfile.flush() + c.rfile.read(4) + h = self.last_handler + h.finish() + + class TestDisconnect(test.ServerTestBase): handler = EchoHandler def test_echo(self): @@ -317,3 +343,4 @@ class TestFileLike: expected = s.first_byte_timestamp s.readline() assert s.first_byte_timestamp == expected + |