UNIX網絡編程——常用的套接字選項

1.設置/獲取套接字選項服務器

int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
int getsockopt(int socket, int level, int option_name, void *restrict option_value, socklen_t *restrict option_len);

 2.經常使用套接字選項的運用

  • SO_REUSEADDR選項
     設置該選項, 能夠確保服務器快速重啓時,不會由於監聽的端口被佔用而失敗。
  • SO_KEEPALIVE選項

     服務器端設置該選項,能夠定時檢測客戶端的狀態。若是客戶端由於異常退出, 則套接字被關閉,檢測的默認時間間隔爲2小時。socket

     如何設置時間間隔?
tcp

修改 /ect/sysctl.conf
     添加以下3行:
net.ipv4.tcp_keepalive_intvl=20//失敗探測間隔時間20秒
net.ipv4.tcp_keepalive_probes=3//失敗探測次數
net.ipv4.tcp_keepalive_time=60//間隔時間
     而後重啓內核:sysctl -p;

  • SO_LINGER選項

     若是選擇此選項,close或 shutdown將等到全部套接字裏排隊的消息成功發送或到達延遲時間後纔會返回。不然,調用將當即返回。spa


  • SO_CONNECT_TIME選項
     經過 getsockopt獲取該選項的值。能夠用來判斷這個SOCKET是否已經超時。是防止攻擊服務器的好方法。
  • 設置SOCKET爲非阻塞

              static void setnonblocking(int sock)
              {
                    int opts;

                    opts=fcntl(sock,F_GETFL);
                    if(opts<0)
                    {
                         exit(1);
                    }

                   opts = opts|O_NONBLOCK;
     
                   if(fcntl(sock,F_SETFL,opts)<0)
                   {
                           exit(1);
                  }   
              }
相關文章
相關標籤/搜索