【发布时间】:2016-02-04 14:33:56
【问题描述】:
如何设置服务器套接字一次可以接受的连接数限制?我希望能够设置最大连接数,然后一旦达到该限制,客户端的任何进一步连接尝试都将导致超时。到目前为止,我已经为服务器尝试过这样的事情:
sock = socket.socket()
sock.setblocking(0)
sock.bind(address)
sock.listen(0)
connections = []
while True:
readable, writable, exceptional = select.select([sock], [], [])
if readable and len(connections) < MAX_CONNECTIONS:
connection, client_address = s.accept()
connections.append(connection)
# Process connection asynchronously
对于客户:
try:
sock = socket.create_connection(self.address, timeout=TIMEOUT)
sock.settimeout(None)
print "Established connection."
except socket.error as err:
print >> sys.stderr, "Socket connection error: " + str(err)
sys.exit(1)
# If connection successful, do stuff
由于程序其余部分的结构,我选择在服务器上使用非阻塞套接字,我不想更改它。现在,客户端能够连接到服务器,即使在达到限制并且服务器停止接受它们之后。我该如何解决这个问题?谢谢。
【问题讨论】:
-
如果您接受了连接但立即关闭它会有帮助吗?
-
我想让它一旦达到连接限制,进一步的连接不会立即失败,因为在达到超时之前另一个客户端可能会断开连接。
-
您的 select.select 语句基本上已经接受了连接。考虑根据当前正在服务的连接数将该语句放在条件中。