关于keeplive
當服務端開啟心跳,客戶端開啟心跳,則當客戶端意外斷開連接,服務端釋放連接,客戶端釋放連接
當服務端關閉心跳,客戶端開啟心跳,則當客戶端意外斷開連接,服務端不會知道,資源不會釋放。而當客戶端再一次向服務端請求連接的時候,服務端才會釋放之前的socket
linux :
socket 配置
? ? ? int optval;
? ? ? socklen_t optlen = sizeof(optval);
? ? ? optval = 1; ?
? ? ? setsockopt(clt_sock, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen); ?
? ? ? optval = 5; ?
? ? ? setsockopt(clt_sock, SOL_TCP, TCP_KEEPCNT, &optval, optlen); ?
? ? ? optval = 1; ?
? ? ? setsockopt(clt_sock, SOL_TCP, TCP_KEEPIDLE, &optval, optlen); ?
? ? ? optval = 1; ?
? ? ? setsockopt(clt_sock, SOL_TCP, TCP_KEEPINTVL, &optval, optlen);
echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 6 > /proc/sys/net/ipv4/tcp_keepalive_probes
windows:
socket 配置
int Opt=1;
TCP_KEEPALIVE live,liveout;
live.keepaliveinterval=500; ?
live.keepalivetime=3000; ?
live.onoff=TRUE; ? ?
int iRet = setsockopt(serSocket,SOL_SOCKET,SO_KEEPALIVE,(char *)Opt,sizeof(int)); ? ?
if(iRet == 0){ ?
DWORD dw; ?
if(WSAIoctl(serSocket,SIO_KEEPALIVE_VALS, ?
&live,sizeof(live),&liveout,sizeof(liveout), ?
&dw,NULL,NULL)== SOCKET_ERROR){ ?
//Delete Client ? ?
return 0; ?
} ? ?
} ?
總結
以上是生活随笔為你收集整理的关于keeplive的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [剑指offer][JAVA]面试题第[
- 下一篇: 排队枪毙游戏c语言,基于C语言实现的约瑟