【发布时间】:2020-03-31 14:49:46
【问题描述】:
我不时在遗留源代码和其他地方看到网络相关代码修改套接字的接收缓冲区大小(使用 setsockopt 和 SO_RCVBUF 选项)。在我的 Windows 10 系统上,套接字的默认缓冲区大小似乎是 64kB。我现在正在处理的遗留代码(写于 10 多年前)将每个套接字的接收缓冲区大小设置为 256kB。
与此相关的一些问题:
- 当套接字被监视和连续读取时,是否有任何理由修改接收缓冲区大小,例如使用
select? - 如果不是,那么 10 多年前是否有这样做的动机?
- 是否有任何示例、用例或应用程序需要修改套接字的接收缓冲区大小(甚至发送缓冲区大小)?
【问题讨论】:
-
这能回答你的问题吗? What are SO_SNDBUF and SO_RECVBUF 即它是特定于应用程序的 - 如果缓冲区在被读取之前已填满,则发送方将被告知减慢 TCP/IP 或丢弃 UDP 的数据包。所以这取决于应用程序的处理方式。
-
可能部分,但不完全。我知道缓冲区是什么以及它们是如何工作的。我的问题更多是关于何时在实践中使用它们。
-
我们需要更多的上下文来回答这个问题。数据包是否以突发形式到达?它们是如何处理的,可以中断等吗?对于 SO 类型的问答,这可能太多了。
-
在我的具体示例中,网络流量负载从低到中等,传入数据在其自己的线程中连续处理。不过,我的问题旨在更笼统。但也许很难说一些笼统的东西。
标签: c++ sockets networking