gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:49 26 4
gpt4 key购买 nike

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

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

使用 AF_UNIX。

最佳答案

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

SO_SNDBUF 限制发送方操作系统使用的缓冲区。发送应用程序最多可以发送 SO_SNDBUF 字节,即使底层网络现在无法发送数据,直到发送被阻塞。当网络堆栈能够接受新的发送时,操作系统负责发送此数据。

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

如您所见,两个缓冲区相加。他们正在网络连接的不同端工作。它们不会相互影响,并且接收方无法在发送方一侧强制执行 SO_SNDBUF - 因为发送方无法在接收方一侧强制执行 SO_RCVBUF。

关于linux - SOCK_SEQPACKET 正在缓冲约 42k 的数据,如何将其限制为更少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com