Skip to content

Commit abff1c7

Browse files
authored
fix: socket not timeout except (#27)
1 parent 631de5a commit abff1c7

File tree

1 file changed

+32
-26
lines changed

1 file changed

+32
-26
lines changed

apisix/runner/server/server.py

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,36 @@
2828
logger = NewServerLogger()
2929

3030

31-
def _threaded(conn: socket):
31+
def _threaded(conn: socket.socket):
3232
while True:
33-
buffer = conn.recv(4)
34-
protocol = NewServerProtocol(buffer, 0)
35-
err = protocol.decode()
36-
if err.code != RESP_STATUS_CODE_OK:
37-
logger.error(err.message)
33+
try:
34+
buffer = conn.recv(4)
35+
protocol = NewServerProtocol(buffer, 0)
36+
err = protocol.decode()
37+
if err.code != RESP_STATUS_CODE_OK:
38+
logger.error(err.message)
39+
break
40+
41+
logger.info("request type:{}, len:{}", protocol.type, protocol.length)
42+
43+
buffer = conn.recv(protocol.length)
44+
handler = NewServerHandle(protocol.type, buffer)
45+
response = handler.dispatch()
46+
if response.code != RESP_STATUS_CODE_OK:
47+
logger.error(response.message)
48+
49+
protocol = NewServerProtocol(response.data, response.type)
50+
protocol.encode()
51+
52+
logger.info("response type:{}, len:{}", protocol.type, protocol.length)
53+
54+
conn.sendall(protocol.buffer)
55+
except socket.timeout as e:
56+
logger.info("connection timout: {}", e.args.__str__())
57+
break
58+
except socket.error as e:
59+
logger.error("connection error: {}", e.args.__str__())
3860
break
39-
40-
logger.info("request type:{}, len:{}", protocol.type, protocol.length)
41-
42-
buffer = conn.recv(protocol.length)
43-
handler = NewServerHandle(protocol.type, buffer)
44-
response = handler.dispatch()
45-
if response.code != RESP_STATUS_CODE_OK:
46-
logger.error(response.message)
47-
48-
protocol = NewServerProtocol(response.data, response.type)
49-
protocol.encode()
50-
response = protocol.buffer
51-
52-
logger.info("response type:{}, len:{}", protocol.type, protocol.length)
53-
54-
err = conn.sendall(response)
55-
if err:
56-
print(err)
57-
break
5861

5962
conn.close()
6063

@@ -74,8 +77,11 @@ def __init__(self, config: NewServerConfig):
7477
def receive(self):
7578
while True:
7679
conn, address = self.sock.accept()
80+
conn.settimeout(60)
7781

78-
NewThread(target=_threaded, args=(conn,)).start()
82+
thread = NewThread(target=_threaded, args=(conn,))
83+
thread.setDaemon(True)
84+
thread.start()
7985

8086
def __del__(self):
8187
self.sock.close()

0 commit comments

Comments
 (0)