gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:53:12 24 4
gpt4 key购买 nike

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

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

SND_BUFRCV_BUF 似乎与发送的实际值无关,并且 TCP_WINDOW_CLAMP 不准确。

最佳答案

您可以使用这个(特定于 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 发送和接收窗口。

关于c - 如何在 linux 中获取套接字的 tcp 窗口大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com