C/C++网络编程中的TCP保活

默认情况下,TCP连接无保活心跳可能导致异常掉线问题。通过设置socket的Keepalive选项,可以在WIN32和Linux平台启用保活。Linux系统下,保活心跳在7200秒后发送,75秒重试9次。可通过setsockopt调整Linux的TCP_KEEPIDLE、TCP_KEEPINTL和TCP_KEEPCNT参数。WIN32环境使用WSAIoctl和tcp_keepalive结构设置,时间单位为毫秒。
摘要由CSDN通过智能技术生成
               

在默认的情况下,TCP连接是没有保活的心跳的。这就是说,当一个TCP的socket,客户端与服务端谁也不发送数据,会一直保持着连接。这其中如果有一方异常掉线,另一端永远也不可能知道。这对于一些服务型的程序来说,将是灾难性的后果。

  所以,必须对创建的socket,启用保活心跳,即Keepalive选项。

启用Keepalive

  对于WIN32或者Linux平台来说,设置socket的Keepalive都很简单,只需使用setsockopt设置SO_KEEPALIVE即可。

  setsockopt的函数原型在Linux环境下为:

#include <sys/types.h>  #include <sys/socket.h>    int setsockopt(int s, int level, int optname,                 const void *optval,                 socklen_t optlen);  
,在WIN32平台下为

#include <winsock2.h>    int setsockopt(int s, int level, int optname,                 const char *optval,                 int optlen);  

  因为const void *可以接受const char *型的参数,所以为了代码的跨平台编译考虑,可以采用以下代码来设置TCP的Keepalive选项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值