SOCK_SEQPACKET正在缓冲〜42k的数据,如何将其限制为更少?

时间:2014-01-17 01:39:45

标签: linux sockets

使用SOCK_SEQPACKET的示例客户端(http://pastebin.com/hAbpFPia)和服务器(http://pastebin.com/9pL27hkK)表示客户端可以排队~42k的数据。

使用setsockopt(套接字,SOL_SOCKET,SO_SNDBUF,...)来设置客户端大小的大小确实会显着限制缓冲数据。有什么方法可以从服务器端强制执行/设置此限制吗?我尝试在调用accept()之前在accept()ed套接字和套接字上设置SO_RCVBUF,但这对我都不起作用。

使用AF_UNIX。

1 个答案:

答案 0 :(得分:0)

服务器无法在客户端上强制执行SO_SNDBUF大小。

SO_SNDBUF限制发件人操作系统使用的缓冲区。即使基础网络现在无法发送数据,发送应用程序也可以发送最多SO_SNDBUF字节,直到发送阻止为止。当网络堆栈能够接受新的发送时,操作系统会小心发送此数据。

SO_RCVBUF,如果接收者的操作系统使用的缓冲区。即使应用程序未调用recv来检索数据,网络堆栈也会接收(并向发送方确认)最多SO_RCVBUF字节。对于unix域套接字SO_RCVBUF没有任何影响,但SO_SNDBUF有。

正如您所看到的,两个缓冲区总结。他们正在研究网络连接的不同端。它们不会相互影响,接收方无法在发送方执行SO_SNDBUF - 因为发送方无法在接收方执行SO_RCVBUF。