int32_t rcvBuf = 400 * 1024;
setsockopt(socketFD, SOL_SOCKET, SO_RCVBUF, &rcvBuf, 4);f
int32_t checkRcvBuf = 0;
unsigned int checkRcvBufLen = sizeof(checkRcvBuf);
getsockopt(socketFD, SOL_SOCKET, SO_RCVBUF, &checkRcvBuf, &checkRcvBufLen);
int32_t sndBuf = 400 * 1024;
setsockopt(socketFD, SOL_SOCKET, SO_SNDBUF, &sndBuf, 4);
int32_t checkSndBuf = 0;
unsigned int checkSndBufLen = sizeof(checkSndBuf);
getsockopt(socketFD, SOL_SOCKET, SO_SNDBUF, &checkSndBuf, &checkSndBufLen);
答案 0 :(得分:2)
在MAC OSX上,您可以通过以下方式查看所有sysctl
变量:
$ sysctl -a
如果您使用前缀net.inet.tcp
$ sysctl -a|grep net.inet.tcp
您可以看到所有相关变量。你正在寻找这两个:
net.inet.tcp.sendspace: 131072
net.inet.tcp.recvspace: 131072
显示我系统上的当前值。
这些也可以通过sysctl
进行设置,并使用man sysctl
了解有关这样做的更多信息,例如设置其中一个值:
$ sudo sysctl net.inet.tcp.sendspace=131072
必须使用root权限设置这些权限,并且如果sysctl
可以设置值,则C / C ++代码可能会执行相同操作,如果它可以访问操作系统内核函数(可能必须以root
)。
另见:
sysctl
来源:
调整MAC OSX内核配置:
Objective-C中的内核函数:
事实上人们至少从Swift读取这些参数意味着它也可以从Objective-C中获取:
可用于编码的相关sysctl
函数:
答案 1 :(得分:1)
SO_SNDBUF:设置默认值 通过/ proc / sys / net / core / wmem_default文件
SO_RCVBUF:设置默认值 通过/ proc / sys / net / core / rmem_default文件
我发现有些线程检查了它 SO_SNDBUF and SO_RCVBUF on Linux sockets http://man7.org/linux/man-pages/man7/socket.7.html
答案 2 :(得分:0)
/proc/sys/net/core/wmem_default
文件运行到您的shell sysctl -a
sysctl -a | grep -i space
SNDBUF
和RCVBUF
。