使用sock-seqpacket的示例客户机(http://pastebin.com/hAbpFPia)和服务器(http://pastebin.com/9pL27hkK)表明,客户机可以将大约42k个数据排队。
使用setsockopt(socket,sol_socket,so_sndbuf,…)在客户机大小上设置大小确实会显著限制缓冲数据。有什么方法可以从服务器端强制/设置此限制吗?在调用accept()之前,我尝试在accept()ed套接字和套接字上设置so rcvbuf,但两者都不适合我。
使用af_unix。
最佳答案
服务器无法在客户端上强制使用so\u sndbuf大小。
因此,sndbuf限制了发送方操作系统使用的缓冲区。发送应用程序最多可以发送这么多sndbuf字节,即使底层网络现在无法发送数据,直到发送被阻止。当网络堆栈能够接受新的发送时,操作系统会注意发送此数据。
因此,如果接收器操作系统使用的缓冲区是rcvbuf。即使应用程序不调用recv来检索数据,网络堆栈也将接收(并向发送方确认)多达sou rcvbuf字节。对于Unix域套接字,所以rcvbuf没有任何效果,但是sndbuf有效果。
你可以看到两个缓冲区的总和。他们在网络连接的不同端工作。它们不会相互影响,接收方也不能在发送方强制使用sou-sndbuf,因为发送方不能在接收方强制使用sou-rcvbuf。
关于linux - SOCK_SEQPACKET正在缓冲〜42k的数据,如何将其限制为更少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21176368/