1. 程式人生 > >TCP長連線和Keepalive詳解

TCP長連線和Keepalive詳解

// 開啟KeepAliveBOOL bKeepAlive = TRUE;
int nRet = ::setsockopt(socket_handle, SOL_SOCKET, SO_KEEPALIVE, (char*)&bKeepAlive, sizeof(bKeepAlive));
if (nRet == SOCKET_ERROR)
{
return FALSE;
}

// 設定KeepAlive引數tcp_keepalive alive_in = {0};
tcp_keepalive alive_out 
= {0};
alive_in.keepalivetime 
=5000// 開始首次KeepAlive探測前的TCP空閉時間
alive_in.keepaliveinterval =1000// 兩次KeepAlive探測間的時間間隔alive_in.onoff = TRUE;
unsigned 
long ulBytesReturn =0;
nRet 
= WSAIoctl(socket_handle, SIO_KEEPALIVE_VALS, &alive_in, sizeof(alive_in),
&alive_out, sizeof(alive_out), &ulBytesReturn, NULL, NULL);
if (nRet == SOCKET_ERROR)
{
return FALSE;
}