制作一个简单的TCP保活机制
typedef struct _tagKeepAlive
{
SOCKET sKeelSock;
DWORD dwErrorCount;
}KeepAlive;
std::vector<KeepAlive> m_KeepAlive;//初始化保活列表
accept后保存SOCKET开启手动保活
KeepAlive m_TempKeep;
m_TempKeep.sKeelSock=sClient;
m_TempKeep.dwErrorCount=0;
m_KeepAlive.push_back(m_TempKeep);//手动保活
开启一条新线程检测保活
while(1)
{
for(int i = (m_KeepAlive.size() - 1); i >= 0; i--)
{
if(m_KeepAlive[i].dwErrorCount>=3)
{
closesocket(m_KeepAlive[i].sKeelSock);
m_KeepAlive.erase(m_KeepAlive.begin() + i);
}
int nRet=send(m_KeepAlive[i].sKeelSock,"1",1,0);
if(nRet<=0)
m_KeepAlive[i].dwErrorCount++;
else
m_KeepAlive[i].dwErrorCount=0;
}
Sleep(KeepaliveTime);
}