Linux Socket编程中的心跳机制(3)

对于异常关闭如网络崩溃、主机宕机等,可通过设置SO_KEEPALIVE设置保活,协议会按照设定间隔自动发送探测分节。该选项分为设置无数据首次探测时间、探测间隔、探测次数控制TCP是否出错。如果你设置首次探测在10秒之后、探测间隔3次,探测次数3次,则最多30秒之后将给应用层返回一个对方非正常关闭的异常,此时可通过获得errno得到对应错误,read/recv返回为-1。具体代码是:

void setKeepAlive( int iSockfd , socklen_t iIdleTime , socklen_t iInterval , socklen_t iCount )
{
    setsockopt( iSockfd , SOL_SOCKET , SO_KEEPALIVE , (const char*)&iSockAttrOn , sizeof(iSockAttrOn) );
    setsockopt( iSockfd , SOL_TCP , TCP_KEEPIDLE , (const char*)&iIdleTime , sizeof(iIdleTime) );
    setsockopt( iSockfd , SOL_TCP , TCP_KEEPINTVL , (const char*)&iInterval,sizeof(iInterval) );
    setsockopt( iSockfd , SOL_TCP , TCP_KEEPCNT , (const char*)&iCount,sizeof(iCount) );
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8c09cb2eebf68925ebca6490e88d6ba2.html