TCP異常斷開檢測
1) 在TCP協議中提供了KEEPALIVE檢測。該選項使能後,在一個TCP連線上,若指定的一段時間內沒有資料交換,則自動傳送分節等待對方確認。
SO_KEEPALIVE : 該選項設定是否開啟探測
TCP_KEEPIDLE : 開始傳送探測分節前等待的空閒時間
TCP_KEEPINTVL: 兩次傳送探測分節的時間間隔
TCP_KEEPCNT: 判定斷開前傳送探測分節的次數
2) 設定探測相關選項值
int keepalive = 1; // 開啟探測
int keepidle = 60; // 開始探測前的空閒等待時間
int keepintvl = 10; // 傳送探測分節的時間間隔
int keepcnt = 3; // 傳送探測分節的次數
3) 設定套接字的屬性
if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive, sizeof (keepalive) < 0)
{
perror(“fail to set SO_KEEPALIVE”);
exit(-1);
}
if (setsockopt(sockfd, SOL_TCP, TCP_KEEPIDLE, (void *) &keepidle, sizeof (keepidle) < 0)
{
perror(“fail to set SO_KEEPIDLE”);