在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_wnd
和trw.rcv_wnd
读取TCP发送和接收窗口。