在Unix数据报域套接字上发送16字节数据包,其中SNDBUF保留在我的124928框的默认值上(使用getsockopt()
验证)。还将max_dgram_qlen
提升到512.出于测试目的,我的接收器在绑定到Unix数据报域套接字后正在休眠。
当我启动发件人时,我在发送423个数据包后开始收到EAGAIN
错误(我正在使用MSG_DONTWAIT
发送)。那时我只发送了大约7k(不包括任何标题),考虑到它的当前设置,似乎有点早就填满了SNDBUF。
为了验证它确实是限制发送的SNDBUF,我逐渐碰到了SNDBUF,直到它能够命中max_dgram_qlen
(实际上它命中513)。我必须为此设置的SNDBUF值是75177(由getsockopt()
返回的151554)。
任何想法都会受到高度赞赏,因为感觉好像我在这里遗漏了一些明显的东西。