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