问题 如何停止python socket.accept()调用?


我是python套接字的新手,我真的很困扰socket.accept()方法的固执。我真的需要一种方法来结束socket.accept()方法或socket.accept()的任何其他替代方法,它只运行一次。 Plzzzz有人帮忙。


4923
2018-04-10 13:59


起源

你应该看看 socket.setblocking 功能和 select 模块。 - Some programmer dude


答案:


你有几个选择:

  1. 从另一个线程关闭侦听套接字 - accept() 如果失败将引发异常。
  2. 打开一个到侦听套接字的本地连接 - 这使得 accept() 按设计回归。
  3. 使用可以阻止多个同步对象的接受机制,以便可以发出等待信号,以便在没有连接的情况下返回。
  4. 使用非阻塞替代方法 accept(),(async like AcceptEx() 和Windows上的重叠IO)。

11
2018-04-10 14:07



在Python中 accept 如果失败将引发异常。 - Niklas B.
@NiklasB。 - 谢谢。我没有任何Python,但OP问题更像是一般的TCP服务器问题,所有语言都需要相同的“技巧”。 - Martin James
你能给出一个例子,因为如前所述,我是一个新手....我实际上是在pygtk写一个服务器。我的问题是窗口因socket.accept()调用而挂起。 - cybernerd
在OSX 10.10和Python 2.7.6上,(1)是不可靠的。但是,用一个 quit_now 接受循环中的样式标志,然后连接(2)触发从accept()返回工作正常。 - Harvey
选项#2似乎最适合我的几个应用程序。 - Johnny Utahh