gpt4 book ai didi

windows - 什么是 SO_SNDBUF 和 SO_RCVBUF

转载 作者:可可西里 更新时间:2023-11-01 12:11:26 28 4
gpt4 key购买 nike

你能解释一下 SO_SNDBUFSO_RCVBUF 选项到底是什么吗?

好的,出于某种原因,操作系统会缓冲传出/传入数据,但我想澄清一下这个问题。

  • 他们的角色(通​​常)是什么?
  • 它们是每个套接字缓冲区吗?
  • 传输层的缓冲区(例如 TCP 缓冲区)和这些缓冲区之间是否存在联系?
  • 它们在使用流式套接字 (TCP) 和使用无连接套接字 (UDP) 时是否有不同的行为/角色?

好的文章也会很棒。

我用谷歌搜索但没有找到任何有用的信息。

最佳答案

“SO_”前缀用于“套接字选项”,所以是的,这些是针对每个套接字缓冲区的每个套接字设置。通常有系统范围的默认值和最大值。

SO_RCVBUF 更容易理解:它是内核分配的缓冲区大小,用于保存在数据通过网络到达给定套接字和被读取之间的时间到达给定套接字的数据拥有这个套接字的程序。使用 TCP,如果数据到达而您没有读取它,缓冲区将填满,并且发送方将被告知放慢速度(使用 TCP 窗口调整机制)。对于 UDP,一旦缓冲区已满,新数据包将被丢弃。

SO_SNDBUF,我认为,只对 TCP 很重要(在 UDP 中,无论您发送什么,都会直接发送到网络)。对于 TCP,如果远程端没有读取,您可以填充缓冲区(这样远程缓冲区变满,然后 TCP 将这个事实传达给您的内核,并且您的内核停止发送数据,而是将其累积在本地缓冲区中直到它填上)。或者,如果存在网络问题,它可能会填满,并且内核没有收到它发送的数据的确认。然后它将减慢在网络上发送数据的速度,直到最终传出缓冲区填满。如果是这样,应用程序将来对该套接字的 write() 调用将被阻止(或者返回 EAGAIN 如果您设置了 O_NONBLOCK 选项) .

这一切在 Unix Network Programming 中得到了最好的描述书。

关于windows - 什么是 SO_SNDBUF 和 SO_RCVBUF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4257410/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com