SOL_Keepalive套接字选项是用于TCP连接的。
可以防止客户端一段时间没有向服务器发送TCP包,服务器认为客户端已经不存在而断开TCP连接。
实际上就是隔一段时间就向服务器发送一个数据包,让服务器知道客户端还存在,不要断开连接。但SOL_Keepalive套接字选项实现上是怎么做的呢?发的是什么数据包呢?

解决方案 »

  1.   

    这个和HTTP协议中的Keep alive 有关吗?
      

  2.   

    in linux :
    int keepalive = 1;
    int keepidle = 900;/* sock is the socket */
    setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (void *) &keepalive, sizeof(keepalive));
    setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, (void *) &keepidle, sizeof(keepidle))注:SO_KEEPALIVE系统有, TCP_KEEPIDLE自己定义为好像:04 或02 08,这是每隔900秒发一个空消息。还有可以手动发一个空格过去,IP包的大小是相同的,效果也相同