Estoy creando una conexión TCP desde mi programa Linux con boost.asio. Me pregunto cómo obtengo el valor de su ventana de congestión (cwnd) del programa. La única forma que conozco es analizar /proc/net/tcp , pero esto no se siente bien. Prefiero usar una llamada al sistema dedicada para obtener esta información.
Una solución a una pregunta similar ( ¿Cómo monitorear los valores cwnd y ssthresh para una conexión TCP? ) sugiere usar TCP Probe, pero se siente aún menos atractivo.
Entonces, ¿cuál es la mejor manera de obtener el valor de cwnd?
Hice esto con netlink e INET_DIAG-sockets según este útil ejemplo: https://github.com/kristrev/inet-diag-example
Resultó que getsockopt() puede devolver el mismo tcp_info cuando se llama con la opción TCP_INFO :
tcp_info tcpi = {}; socklen_t len = sizeof(tcp_info); getsockopt(tcp_socket, SOL_TCP, TCP_INFO, &tcpi, &len); tcpi.tcpi_snd_cwnd; // <-- CWND