SO_RCVBUF的最小值是多少?

Ben*_*ird 5 c networking buffer udp system-calls

为了最大限度地减少延迟(我不关心数据包丢失),我想要UDP最小的接收缓冲区.但是,当我将SO_RCVBUF设置为低于1000(使用setsockopt)时,我的程序永远不会收到任何数据包.我发送的数据报有28个字节的数据,总线上数据包大小为70字节,那么为什么SO_RCVBUF <1000时我什么都收不到?我该如何改变它,以允许更小的缓冲区大小?

另外,是否可以根据数据包数而不是字节数来设置缓冲区?或者有什么方法可以手动清空它吗?

Nik*_*sov 4

减小套接字接收缓冲区不会减少延迟。

相反,您每次都需要将所有可用的数据包出队。这可以通过非阻塞套接字和边缘触发epollkqueue“可读”事件读取来完成,直到获得EWOULDBLOCK.

至于为什么你没有得到任何小SO_RCVBUF值的输入,请看这里 - http://vger.kernel.org/~davem/skb_sk.html和这里 - http://lxr.linux.no/#linux+ v2.6.37/include/net/sock.h#L621

希望这可以帮助。