微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

这是有道理的,因为缓冲区可能是在创build时分配的,因此我将不得不通过设置缓冲区大小来依靠监听套接字的inheritance语义,除了手册页(而不是套接字)提及inheritance,并且实际上状态:

创build一个Linux数据包分解器

从shell中杀死linux套接字(gentoo amd64)

为什么在多个系统调用中,TCP套接字的速度变慢?

recv()失败:错误文件描述符c ++ Linux

文件传输应用程序

在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] 举报,一经查实,本站将立刻删除。

相关推荐