检测clientocket何时尝试连接到serversocket

时间:2013-10-06 17:31:33

标签: python multithreading sockets

我创建一个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()来停止线程

任何帮助将不胜感激

1 个答案:

答案 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设置较低的超时 对线程进行更细致的控制。