我从客户端接受套接字并增加了发送缓冲区的大小后,编写了以下代码。但是,当我尝试使用lsof检查缓冲区大小时,它的大小为52。
// Set buffer size
int sendbuff = 98304;
printf("sets the send buffer to %d\n", sendbuff);
int res = setsockopt(newSocket, SOL_SOCKET, SO_SNDBUF, &sendbuff, sizeof(sendbuff));
// check buffer size
sudo lsof -T qs | grep 6697 => TCP localhost:7891->localhost:44718 (ESTABLISHED QR=0 ***QS=52***)
我发现了一篇关于接收缓冲区大小的类似文章。 Socket buffer size not increasing。但是无法确定是否还有设置可以关闭sndbuf大小自动调整功能。
我尝试使用以下方法关闭接收缓冲区的自动调整功能:
echo 0 | sudo tee /proc/sys/net/ipv4/tcp_moderate_rcvbuf
然后使用以下命令更改接收缓冲区的大小:
res = setsockopt(newSocket, SOL_SOCKET, SO_RCVBUF, &sendbuff, sizeof(sendbuff));
但这不会生效。