2012-04-02 49 views
1

我知道我可以通过cat/proc/sys/net/core/wmem_max来获取套接字上SO_SNDBUF的最大大小,但是有没有一种简单的方法可以在C中查询这个值,而不需要通过开启感觉的步骤该文件,阅读,并转换为一个整数?在外壳查询C中的最大套接字发送缓冲区大小?

+0

据我所知这是唯一的方式获得当前剩余的缓冲区。 – 2012-04-02 17:20:30

回答

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"); 
相关问题