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()