2016-09-09 26 views
-1
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

我可以設置throgh此代碼的值Δα我是對的還是錯的... –

+0

什麼是SO_SNDBUF和SO_RCVBUF在OS X中的默認值? –

+0

我在AppleDoc中讀取https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man2/setsockopt.2.html系統對這些 值進行絕對限制。什麼是限制?????? –

回答

0
  1. 訪問你的根[R殼(終端)...
  2. 運行/proc/sys/net/core/wmem_default文件到您的外殼
  3. 當您達到您的文件運行此命令sysctl -a
  4. 然後運行像sysctl -a | grep -i space
  5. 那麼下一個命令,你得到的默認大小您的操作系統的SNDBUFRCVBUF
+0

這不是很清楚。 「運行...進入你的shell」是執行一個進程,還是'cat'文件? 「當你到達你的文件」意味着什麼,在這種情況下「達到」意味着什麼?在grep命令中是「空格」文字嗎? –

0

SO_SNDBUF:默認值是通過在/ proc/SYS /網/核心設置 /wmem_default文件

SO_RCVBUF:默認值是通過在/ proc/SYS /網/核心/ rmem_default設置 文件

我發現了一些線程檢查
SO_SNDBUF and SO_RCVBUF on Linux sockets http://man7.org/linux/man-pages/man7/socket.7.html

+0

我在哪裏發現了/ proc/sys/net/core/wmem_default文件.......在命令或文件中 –

+0

我在哪裏搜索它以及它的默認值(64K或更多) –

0

在Mac OSX上,你可以通過查看所有sysctl變量:

$ sysctl -a 

如果使用grep命令那些前綴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運行),那麼C/C++代碼可能會執行相同的操作。

參見:

sysctl源:

調諧MAC OSX內核配置:

內核函數在Objective-C:

而事實上,人們至少從閱讀斯威夫特這些參數意味着可以從Objective- C:

相關sysctl可供譯碼功能:

相關問題