一 SO_KEEPALIVE保持连接选项
选项SO_KEEPALIVE 用于设置TCP 连接的保持,当设置此项后,连接会测试连接的状态。这个选项用于可能长时间没有数据交流的连接,通常在服务器端进行设置。
**工作过程:**当设置SO_KEEPALIVE 选项后,如果在两个小时内(默认)没有数据通信时,TCP 会自动发送一个活动探测数据报文,对方必须对此进行响应,通常有如下3种情况。
- TCP 的连接正常,发送一个ACK 响应,再过两个小时,又会再发送一个。
- 对方发送RST 响应,对方在2 个小时内进行了重启或者崩溃。之前的连接已经失效,套接字收到一个ECONNRESET错误,之前的套接字关闭。
- 如果对方没有任何响应,则本机会发送另外8 个活动探测报文,时间的间隔为75s。当第一个活动报文发送11 分15 秒后仍然没有收到对方的任何响应,则放弃探测,套接字错误类型设置为ETIMEOUT,并关闭套接字连接。
int fd; /*套接字变量*/
int err; /*错误值*/
int optval = 1; /*将选项设置为有效*/
/*设置选项*/
err = setsockopt( fd,SOL_SOCKET,SO_KEEPALIVE, &optval, sizeof(optval));