我知道我可以通過cat/proc/sys/net/core/wmem_max來獲取套接字上SO_SNDBUF的最大大小,但是有沒有一種簡單的方法可以在C中查詢這個值,而不需要通過開啓感覺的步驟該文件,閱讀,並轉換爲一個整數?在外殼查詢C中的最大套接字發送緩衝區大小?
1
A
回答
2
要獲得net.ipv4.tcp_wmem的sysctl的價值,你需要分析它表示的sysctl/proc文件的(真的有在Linux上沒有更好的辦法,以及sysctl系統調用早已被棄用)。
喜歡的東西:
unsigned long wmem_min,wmem_default,wmem_max;
FILE *f = fopen("/proc/sys/net/ipv4/tcp_wmem", "r");
if(f == NULL)
fail();
if(fscanf(f, "%lu %lu %lu", &wmem_min,&wmem_default,&wmem_max) != 3)
fail();
fclose(f);
... use wmem_max
某個特定端口,你可以用
socklen_t optlen;
int send_buf, rc;
optlen = sizeof(send_buf);
//if getsockopt is successful, send_buf will hold the buffer size
rc = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &send_buf, &optlen);
0
你們能不能調用的sysctl命令(使用系統()或POPEN/pclose函數())來獲取這些信息......至少避免了打開一個文件,但可能相當於在整體的醜陋:
system("sysctl -n net.ipv4.tcp_wmem");
相關問題
- 1. C++套接字緩衝區大小
- 2. 設置接收和發送緩衝區的套接字緩衝區大小
- 3. C++套接字編程TCP/IP套接字緩衝區的最大大小?
- 4. 套接字接收緩衝區大小
- 5. iPhone的最大套接字緩衝區大小
- 6. 在Tomcat/Jetty上設置套接字發送緩衝區大小
- 7. 通過套接字發送文件 - 緩衝區大小
- 8. C#通過套接字和TCP發送巨大和小的數據緩衝區
- 9. udp套接字中的接收緩衝區/隊列的最大大小
- 10. 緩衝區大小在c + +套接字連接
- 11. C#套接字接收緩衝區大小成本
- 12. C中字符緩衝區的最大大小?
- 13. Android - 發送DatagramSocket最大緩衝區大小
- 14. Winsock發送recv緩衝區大小
- 15. 如何在python中爲套接字設置發送緩衝區大小
- 16. C Windows緩衝區大小
- 17. 接受的套接字的設置緩衝區大小
- 18. ObjectOutputStream最大緩衝區大小
- 19. Emacs ansi-term最大緩衝區大小?
- 20. tcp/ip套接字的接收緩衝區大小
- 21. Linux套接字緩衝數據大小
- 22. C中的緩衝區大小
- 23. 爲什麼接收的緩衝區大小比原來通過套接字發送的大?
- 24. C - 通過TCP發送緩衝區的合適大小
- 25. 更改Windows下的默認套接字緩衝區大小
- 26. 套接字編程的緩衝區大小是多少?
- 27. Python的套接字客戶端recv(緩衝區大小)
- 28. 套接字和文件建議的緩衝區大小
- 29. 有沒有辦法減少套接字發送緩衝區大小的最小下限?
- 30. Linux上的UDP套接字;發送成功但無法接收大緩衝區
據我所知這是唯一的方式獲得當前剩餘的緩衝區。 – 2012-04-02 17:20:30