SOCK_SEQPACKET正在caching〜42k的数据,如何将其限制到更less?

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

使用setsockopt(套接字,SOL_SOCKET,SO_SNDBUF,…)来设置客户端大小的大小确实会极大地限制caching的数据。 有什么办法可以强制/从服务器端设置此限制? 我试着在accept()函数上设置SO_RCVBUF,然后调用accept()函数,但是这两个函数都不适用于我。

使用AF_UNIX。

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

SO_SNDBUF限制发送者操作系统使用的缓冲区。 发送应用程序可以发送高达SO_SNDBUF字节,即使底层网络现在无法发送数据,直到发送将被阻止。 当网络堆栈能够接受一个新的发送时,OS注意发送这个数据。

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

正如你可以看到两个缓冲区总结。 他们正在网络连接的不同端。 它们不会互相影响,而且接收方也不能在发送方执行SO_SNDBUF,因为发送方无法在接收方执行SO_RCVBUF。