gpt4 book ai didi

linux - tcp keepalive - 协议(protocol)不可用?

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

我正在尝试设置 tcp keepalive 但在这样做时我看到了错误

“协议(protocol)不可用”

int rc = setsockopt(s, SOL_SOCKET, TCP_KEEPIDLE, &keepalive_idle, sizeof(keepalive_idle));
if (rc < 0)
printf("error setting keepalive_idle: %s\n", strerror(errno));

我可以打开 keepalive,设置 keepalive 间隔和计数,但是 keepalive idle 是 keepalive 时间会抛出该错误,而且我从来没有看到任何使用 wireshark 和过滤器 tcp 传输/接收的 keepalive 数据包。 analysis.keep_alive 或使用 tcpdump

sudo tcpdump -vv "tcp[tcpflags] == tcp-ack and less 1"

有没有需要加载的内核模块之类的?或者您是否不再能够覆盖全局 KEEPIDLE 时间。

顺便输出

matt@devpc:~/ sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_probes net.ipv4.tcp_keepalive_intvl
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75

最佳答案

在我编写的应用程序中,以下工作:

setsockopt(*sfd, SOL_SOCKET, SO_KEEPALIVE,(char *)&enable_keepalive, sizeof(enable_keepalive));
setsockopt(*sfd, IPPROTO_TCP, TCP_KEEPCNT, (char *)&num_keepalive_strobes, sizeof(num_keepalive_strobes));
setsockopt(*sfd, IPPROTO_TCP, TCP_KEEPIDLE, (char *)&keepalive_idle_time_secs, sizeof(keepalive_idle_time_secs));
setsockopt(*sfd, IPPROTO_TCP, TCP_KEEPINTVL, (char *)&keepalive_strobe_interval_secs, sizeof(keepalive_strobe_interval_secs));

尝试将 SOL_SOCKET 更改为 IPPROTO_TCP for TCPKEEPIDLE

关于linux - tcp keepalive - 协议(protocol)不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23669005/

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