This is an automated email from the ASF dual-hosted git repository.

shuaijinchao pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/apisix-python-plugin-runner.git


The following commit(s) were added to refs/heads/master by this push:
     new abff1c7  fix: socket not timeout except (#27)
abff1c7 is described below

commit abff1c7f3786b3fa4fd193354f751577e4f1fb33
Author: 帅进超 <[email protected]>
AuthorDate: Tue Aug 24 00:05:40 2021 +0800

    fix: socket not timeout except (#27)
---
 apisix/runner/server/server.py | 58 +++++++++++++++++++++++-------------------
 1 file changed, 32 insertions(+), 26 deletions(-)

diff --git a/apisix/runner/server/server.py b/apisix/runner/server/server.py
index 53ca38c..ca311a7 100644
--- a/apisix/runner/server/server.py
+++ b/apisix/runner/server/server.py
@@ -28,33 +28,36 @@ from apisix.runner.server.response import 
RESP_STATUS_CODE_OK
 logger = NewServerLogger()
 
 
-def _threaded(conn: socket):
+def _threaded(conn: socket.socket):
     while True:
-        buffer = conn.recv(4)
-        protocol = NewServerProtocol(buffer, 0)
-        err = protocol.decode()
-        if err.code != RESP_STATUS_CODE_OK:
-            logger.error(err.message)
+        try:
+            buffer = conn.recv(4)
+            protocol = NewServerProtocol(buffer, 0)
+            err = protocol.decode()
+            if err.code != RESP_STATUS_CODE_OK:
+                logger.error(err.message)
+                break
+
+            logger.info("request type:{}, len:{}", protocol.type, 
protocol.length)
+
+            buffer = conn.recv(protocol.length)
+            handler = NewServerHandle(protocol.type, buffer)
+            response = handler.dispatch()
+            if response.code != RESP_STATUS_CODE_OK:
+                logger.error(response.message)
+
+            protocol = NewServerProtocol(response.data, response.type)
+            protocol.encode()
+
+            logger.info("response type:{}, len:{}", protocol.type, 
protocol.length)
+
+            conn.sendall(protocol.buffer)
+        except socket.timeout as e:
+            logger.info("connection timout: {}", e.args.__str__())
+            break
+        except socket.error as e:
+            logger.error("connection error: {}", e.args.__str__())
             break
-
-        logger.info("request type:{}, len:{}", protocol.type, protocol.length)
-
-        buffer = conn.recv(protocol.length)
-        handler = NewServerHandle(protocol.type, buffer)
-        response = handler.dispatch()
-        if response.code != RESP_STATUS_CODE_OK:
-            logger.error(response.message)
-
-        protocol = NewServerProtocol(response.data, response.type)
-        protocol.encode()
-        response = protocol.buffer
-
-        logger.info("response type:{}, len:{}", protocol.type, protocol.length)
-
-        err = conn.sendall(response)
-        if err:
-            print(err)
-        break
 
     conn.close()
 
@@ -74,8 +77,11 @@ class Server:
     def receive(self):
         while True:
             conn, address = self.sock.accept()
+            conn.settimeout(60)
 
-            NewThread(target=_threaded, args=(conn,)).start()
+            thread = NewThread(target=_threaded, args=(conn,))
+            thread.setDaemon(True)
+            thread.start()
 
     def __del__(self):
         self.sock.close()

Reply via email to