在C中查询最大套接字发送缓冲区大小?

我知道我可以cat / proc / sys / net / core / wmem_max在SOCKET上获得SO_SNDBUF的最大大小,但是有没有一种简单的方法可以在C中查询这个值,而不需要通过打开文件的感觉,阅读,并转换为一个整数?

为了得到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); 

难道你不能在shell上调用sysctl命令(使用system()popen / pclose() )来获取这些信息…至少避免打开一个文件,但总体上可能是等价的:

 system("sysctl -n net.ipv4.tcp_wmem");