Чтобы получить значение sysctl net.ipv4.tcp_wmem, вам нужно проанализировать его из файла / proc, представляющего этот sysctl (лучшего способа в 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);