作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 linux c api 中有没有办法获取 tcp 套接字的传入窗口大小?
明确地说,传入是指从我的 Linux 服务器的角度来看。似乎我接受的套接字中 linux 中的 SND 和 RCV 值被翻转了,即 RCV 意味着从服务器到客户端。在这种情况下,我需要客户端到服务器端,即 SND。
SND_BUF
和 RCV_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_wnd
和 trw.rcv_wnd
读取 TCP 发送和接收窗口。
关于c - 如何在 linux 中获取套接字的 tcp 窗口大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070889/
我是一名优秀的程序员,十分优秀!