OS X系统中设置的SO_SNDBUFF和SO_RCVBUFF的默认值是多少?

时间:2016-09-09 07:57:19

标签: objective-c

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);

3 个答案:

答案 0 :(得分:2)

在MAC OSX上,您可以通过以下方式查看所有sysctl变量:

$ sysctl -a

如果您使用前缀net.inet.tcp

进行grep
$ 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)

  1. 访问shell的根目录(终端)......
  2. /proc/sys/net/core/wmem_default文件运行到您的shell
  3. 当您到达您的文件时,请运行此命令sysctl -a
  4. 然后运行下一个命令,如sysctl -a | grep -i space
  5. 然后您将获得操作系统的默认大小SNDBUFRCVBUF