1. 程式人生 > >TCP異常斷開檢測

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”);