c-如何在linux中获取套接字的tcp窗口大小



在linux c api中有没有办法获得tcp套接字的传入窗口大小?

需要明确的是,我所说的传入是指从我的linux服务器的角度来看。在我接受的套接字中,linux中的SND和RCV值似乎发生了翻转,即RCV意味着从服务器到客户端。在这种情况下,我需要客户端到服务器端,即SND。

CCD_ 1和CCD_,CCD_ 3不准确。

您可以使用以下(特定于linux,不可移植)套接字选项读取内部tcp套接字参数:

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);

现在可以从trw.snd_wndtrw.rcv_wnd读取TCP发送和接收窗口。

最新更新