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小時。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;
若是選擇此選項,close或 shutdown將等到全部套接字裏排隊的消息成功發送或到達延遲時間後纔會返回。不然,調用將當即返回。spa
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); } }