什么是在Linux下设置accept()'d套接字的缓冲区(即,SO_RCVBUF,SO_SNDBUF)大小的正确方法?
显而易见的答案是在新创build的套接字上调用setsockopt(),但是tcp手册页指出:
在单个连接上,必须先在listen(2)或connect(2)调用之前设置套接字缓冲区大小才能使其生效。 有关更多信息,请参阅套接字(7)。
这是有道理的,因为缓冲区可能是在创build时分配的,因此我将不得不通过设置缓冲区大小来依靠监听套接字的inheritance语义,除了手册页(而不是套接字)提及inheritance,并且实际上状态:
创build一个Linux数据包分解器
从shell中杀死linux套接字(gentoo amd64)
文件传输应用程序
在Linux上,accept()返回的新套接字不会从监听套接字中inheritance文件状态标志,如O_NONBLOCK和O_ASYNC。 这种行为不同于规范的BSD套接字实现。 可移植程序不应该依赖于文件状态标志的inheritance或者不inheritance,并且总是明确地设置从accept()返回的套接字上所有需要的标志。
目前还不清楚“文件状态标志”是指什么,它是否包含套接字选项,并阅读了一些相关的计算器问题,我并不聪明。
从多核心sockets的好处? (Linux)的
为什么connect()会给EADDRNOTAVAIL?
Android到Windows的TCP通信延迟
无法在Eclipse中运行junittesting
Windows Socket无法绑定VPN IP地址
那第一个报价只适用于接收缓冲区,真正的原因是,如果> = 64k,那么在连接握手期间可以协商一个窗口范围。 答案确实是将其设置在侦听套接字上,从所有可接受的套接字继承,并且不是,它不是文件状态标志。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。