gpt4 book ai didi

c++ - MAC OS X下如何配置TCP_KEEPALIVE

转载 作者:太空狗 更新时间:2023-10-29 20:14:36 28 4
gpt4 key购买 nike

目前我遇到了这个问题:如何检测不可预测的连接断开。

我在linux下用SO_KEEPALIVE,TCP_KEEPIDLE,TCP_KEEPINTVL和TCP_KEEPCNT来解决,现在看来工作正常。

然而,我真的花了很长时间才找到如何在 MAC OS X 下解决它。有人建议我转向 netinet/tcp_var.h,但仍然没有找到上述宏。

所以,我的问题是,

如何在MAC OS X下实现TCP KEEPALIVE?

P.S.: 我的 MAC OS X 版本是 10.8.3,我的 gcc/g++ 版本是 4.2.1

如有任何回复,我们将不胜感激。

最佳答案

其实Darwin(BSD)比Linux简单。设置 TCP_KEEPALIVE (secs) 选项,以及 SO_KEEPALIVE (bool) 选项:

int on = 1, secs = 10;
setsockopt(skt, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof on);
setsockopt(skt, IPPROTO_TCP, TCP_KEEPALIVE, &secs, sizeof secs);

要查看默认间隔是多少(如果您刚刚执行了 SO_KEEPALIVE),请使用:

sysctl -A | grep net.inet.tcp.*keep

您可能会看到:

net.inet.tcp.keepidle: 7200000
net.inet.tcp.keepintvl: 75000
net.inet.tcp.keepinit: 75000
net.inet.tcp.always_keepalive: 0

即keepalive 仅适用于设置了 SO_KEEPALIVE 的套接字,空闲超时为 72000.000 毫秒(2 小时)。 HTH.

关于c++ - MAC OS X下如何配置TCP_KEEPALIVE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860127/

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