【问题标题】:How to stop a python socket.accept() call?如何停止 python socket.accept() 调用?
【发布时间】:2021-10-09 21:26:30
【问题描述】:

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

【问题讨论】:

  • 您应该查看socket.setblocking 函数和select 模块。

标签: python sockets


【解决方案1】:

你有几个选择:

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

【讨论】:

  • @NiklasB。 - 谢谢。我没有任何 Python,但 OP 问题更多的是一般的 TCP 服务器问题,所有语言都需要相同的“技巧”。
  • 你能举个例子吗,因为如前所述,我是一个新手......我实际上是在 pygtk 中编写一个服务器。我的问题是窗口由于 socket.accept() 调用而挂起。
  • 在带有 Python 2.7.6 的 OSX 10.10 上,(1) 不可靠。但是,在接受循环中使用 quit_now 样式标志,然后连接 (2) 以触发从 accept() 的返回工作正常。
  • 选项 #2 似乎最适合我的几个应用程序。
  • 你能举出这些例子吗?你不知道它们会有多大用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
相关资源
最近更新 更多