【问题标题】:If the listen socket is non-blocking socket, accept returns non-blocking socket?如果监听套接字是非阻塞套接字,accept返回非阻塞套接字?
【发布时间】:2019-08-22 23:57:10
【问题描述】:

在任何平台上, accept()函数返回的socket选项是否依赖于监听socket的选项?

例如, 不知监听socket是否处于非阻塞模式,accept()是否返回非阻塞socket?

【问题讨论】:

  • 接受的套接字处于阻塞模式,但所有其他属性都是从侦听套接字继承的,包括例如接收缓冲区大小。这对于设置窗口缩放至关重要:必须在侦听套接字上设置接收缓冲区大小,因为当接受的套接字被接受时,如果大小> 64K,窗口缩放就太晚了。

标签: sockets networking network-programming


【解决方案1】:

我不会说不存在返回的 TCP 套接字的阻塞模式随接受套接字的阻塞模式而变化的任何平台,因为我没有使用所有平台;但我会说我从未在我开发的任何平台(MacOS/X、Windows、Linux、BSD 等)上看到这种行为。 AFAIK accept() 返回的套接字始终具有新 TCP 套接字的默认设置,其中包括套接字处于阻塞模式。也就是说,accept man 页面似乎并没有以一种或另一种方式明确解决问题。

无论如何,如果你担心的话,安全的做法是在accept()返回的套接字上手动设置(或取消设置)阻塞模式,这样你就可以保证它处于你想要的状态.

【讨论】:

  • 所以,你的意思是接受在默认模式下返回套接字对吧?这对我很有帮助,非常感谢你
  • 接受的套接字处于阻塞模式,但所有其他属性都是从侦听套接字继承的,包括例如接收缓冲区大小。
猜你喜欢
  • 1970-01-01
  • 2010-10-31
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 2017-04-18
相关资源
最近更新 更多