我创建一个serversocket并将其绑定到本地端口,然后告诉它在backlog中排队最多5个连接。我想要一种方法来检测clientocket何时连接到serversocket /何时backlog有排队连接。我在一个单独的线程中运行socket.accept(),并且需要能够停止在socket.accept()上挂起线程时我不能做的单独线程。
原因是我试图让服务器套接字仅在用户运行命令时侦听连接,然后在用户运行不同命令时停止。
我希望我的代码能够读取:
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind((socket.gethostname(), 1024))
serversocket.listen(5)
class connectListner (threading.Thread):
def run(self):
while True:
if <item in backlog>:
clientsocket, address = serversocket.accept()
pass
然后我可以使用thread.join()来停止线程
任何帮助将不胜感激
答案 0 :(得分:1)
我建议你使用套接字设置为非阻塞模式,并使用select
知道客户端何时等待accept
,因为服务器套接字变得可读:
serversocket.setblocking(False)
readable, writable, err = select.select([serversocket.fileno()], [], [], 1)
if readable:
clientsocket, address = serversocket.accept()
1秒后,如果没有连接客户端,则选择呼叫结束,并将启动
再次通过while
循环。因此,如果readable
为空,则可以退出该线程
列表,例如。如果需要,可以随意为select
设置较低的超时
对线程进行更细致的控制。