首页 文章

设置接受套接字的缓冲区大小

提问于
浏览
2

在Linux下设置accept()'d套接字的缓冲区(即SO_RCVBUF,SO_SNDBUF)大小的正确方法是什么?

显而易见的答案是在新创建的套接字上调用setsockopt(),但tcp手册页指出:

在单个连接上,必须在listen(2)或connect(2)调用之前设置套接字缓冲区大小才能使其生效 . 有关更多信息,请参阅socket(7) .

这是有意义的,因为缓冲区可能在创建时分配,因此我将不得不通过设置它的缓冲区大小来依赖侦听套接字的继承语义,除了手册页(也没有套接字)提及继承和实际状态:

在Linux上,accept()返回的新套接字不会从侦听套接字继承文件状态标志,如O_NONBLOCK和O_ASYNC . 此行为与规范BSD套接字实现不同 . 可移植程序不应该依赖于文件状态标志的继承或非继承,并且总是在accept()返回的套接字上显式设置所有必需的标志

它's not clear what 1136442 refer to and whether or not it'包含套接字选项,虽然已经阅读a few related stackoverflow questions我不是更聪明的 .

1 回答

  • 1

    第一个引用仅适用于接收缓冲区,真正的原因是,如果> = 64k,则在连接握手期间可以协商窗口比例 . 答案确实是将它设置在侦听套接字上,它将由所有接受的套接字继承,并且不,它不是文件状态标志 .

相关问题