unix 设置保活机制

2018-01-18 21:04:01 +08:00
 thomaswang
int keepAlive = 1;   // 开启 keepalive 属性. 缺省值: 0(关闭)  
int keepIdle = 60;   // 如果在 60 秒内没有任何数据交互,则进行探测. 缺省值:7200(s)  
int keepInterval = 5;   // 探测时发探测包的时间间隔为 5 秒. 缺省值:75(s)  
int keepCount = 2;   // 探测重试的次数. 全部超时则认定连接失效..缺省值:9(次)  
setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));  
setsockopt(s, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));  
setsockopt(s, SOL_TCP, TCP_KEEPINTVL, (void*)&keepInterval, sizeof(keepInterval));  
setsockopt(s, SOL_TCP, TCP_KEEPCNT, (void*)&keepCount, sizeof(keepCount));  

这个是 server 端还是 client 端设置,还是都设置?

1733 次点击
所在节点    程序员
4 条回复
jimzhong
2018-01-19 02:54:56 +08:00
Panic
2018-01-19 08:25:21 +08:00
保活一般都是应用自己加的,基本没人用 tcp 层面的 KEEPALIVE
thomaswang
2018-01-19 16:06:01 +08:00
@Panic 能说说自己怎么加吗,服务端(对每个连接)、客户端都要设置计时,到时间就发个包给对放 ?
Panic
2018-01-20 10:14:55 +08:00
@thomaswang 不叫保活, 不都叫心跳吗, 反正我们自己都是用心跳的. 类似下面这种
https://segmentfault.com/a/1190000006832547

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX