我知道我可以通過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. 套接字接收緩衝區大小
- 4. iPhone的最大套接字緩衝區大小
- 5. 通過套接字發送文件 - 緩衝區大小
- 6. C#通過套接字和TCP發送巨大和小的數據緩衝區
- 7. 緩衝區大小在c + +套接字連接
- 8. Winsock發送recv緩衝區大小
- 9. C Windows緩衝區大小
- 10. 接受的套接字的設置緩衝區大小
- 11. Emacs ansi-term最大緩衝區大小?
- 12. ObjectOutputStream最大緩衝區大小
- 13. tcp/ip套接字的接收緩衝區大小
- 14. Linux套接字緩衝數據大小
- 15. C中的緩衝區大小
- 16. 爲什麼接收的緩衝區大小比原來通過套接字發送的大?
- 17. Python的套接字客戶端recv(緩衝區大小)
- 18. 套接字和文件建議的緩衝區大小
- 19. 套接字編程的緩衝區大小是多少?
- 20. C - 通過TCP發送緩衝區的合適大小
- 21. 有沒有辦法減少套接字發送緩衝區大小的最小下限?
- 22. 套接字緩衝區大小:優點和缺點更大或更小
- 23. C#套接字編程 - 如何確定接收緩衝區的大小
- 24. execv的緩衝區大小
- 25. 如何配置阿卡發送/接收緩衝區大小和最大幀大小
- 26. MPI發送和接收掛起的緩衝區大小大於64kb
- 27. Android最佳緩衝區大小
- 28. C#發送/接收字節大小的問題(套接字)
- 29. 查詢在linux上的套接字上發送緩衝區的使用情況
- 30. QSqlQuery緩衝區大小
據我所知這是唯一的方式獲得當前剩餘的緩衝區。 – 2012-04-02 17:20:30