【问题标题】:Is it safe to run server.accept() constantly with sockets?使用套接字不断运行 server.accept() 是否安全?
【发布时间】:2019-03-23 02:55:06
【问题描述】:

现在我正在使用 Python 中的 TCP 和 sockets 模块构建一个服务器-客户端程序。浏览了整个 Internet,很明显在服务器代码中需要 conn, addr = server.accept() 行,但是服务器无法知道客户端何时连接。服务器运行后可能需要几秒钟到几分钟。

所以我的问题是:我可以使用线程来不断运行server.accept() 代码行,以便任何选择连接的客户端都可以吗?或者这会导致恶意连接吗?

【问题讨论】:

标签: python sockets


【解决方案1】:

根据Can 'connect' call on socket return successfully without server calling 'accept'?

TCP 建立连接 - 3 次握手 - 在 准备好后将其覆盖并放入已完成的连接队列中。 Accept() 从这个前面返回下一个等待连接 排队。

从客户的角度来看,它是“连接的”,但不会 与任何人交谈,直到服务器接受并开始处理。种类 就像当你打电话给公司并立即被搁置时 队列。您已“连接”,但在此之前不会完成任何业务 有人真的拿起并开始说话。

因此,如果您不这样做,就不会“错过”连接。但是accept() 通常无论如何都在无限循环中运行——在主线程中或其他地方——因为它是服务客户端的服务器的主要工作。

根据Is accept() thread-safe?accept() 是线程安全的,你可以让它在单独的线程中运行,甚至是multiple accept() calls in different threads (or even different processes in OSes with fork) at the same time

【讨论】:

  • 谢谢。我无法要求更好的答案
  • @TomasHowtun 如果答案解决了您的问题,请考虑acceptingit
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 2023-03-23
  • 2018-12-20
  • 2012-04-26
  • 1970-01-01
  • 2021-09-04
  • 2021-07-04
  • 2013-04-30
相关资源
最近更新 更多