+-
c – 如何在MAC OS X下配置TCP_KEEPALIVE
目前我遇到过这个问题:如何检测不可预测的连接断开.

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

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

所以,我的问题是,

如何在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 - 乐贴网