Внутренние параметры сокета tcp можно прочитать с помощью этой (специфичной для linux, непереносимой) опции сокета:
struct tcp_info ti;
socklen_t tisize = sizeof(ti);
getsockopt(fd, IPPROTO_TCP, TCP_INFO, &ti, &tisize);
Структура tcp_info определена в linux/tcp.h
, а ее член ti.tcpi_rcv_space
содержит объявленное окно приема tcp для соответствующего сокета.
Начиная с Linux 4.8, появилась новая опция сокета tcp TCP_REPAIR_WINDOW
, которая позволяет читать (и даже устанавливать) окно отправки и получения напрямую:
struct tcp_repair_window trw;
socklen_t trwsize = sizeof(trw);
getsockopt(fd, IPPROTO_TCP, TCP_REPAIR_WINDOW, &trw, &trwsize);
Теперь окно отправки и получения TCP можно прочитать из trw.snd_wnd
и trw.rcv_wnd
.