当前位置: 技术问答>linux和unix
如何知道socket已经断开?
来源: 互联网 发布时间:2016-06-19
本文导语: 如题,如果用C在LINUX中如何实现?最好能够同时侦测其他各种TCP SOCKET的异常情况,谢谢。 小弟分数太少了,只有10分,大家别嫌少。 | 发送心跳包 或者 使用select struct timeval timeout ...
如题,如果用C在LINUX中如何实现?最好能够同时侦测其他各种TCP SOCKET的异常情况,谢谢。
小弟分数太少了,只有10分,大家别嫌少。
小弟分数太少了,只有10分,大家别嫌少。
|
发送心跳包
或者
使用select
或者
使用select
struct timeval timeout = { 0, 0 };
fd_set readSocketSet;
FD_ZERO(&readSocketSet);
FD_SET(m_hSocket, &readSocketSet);
iRet = ::select(0, &readSocketSet, NULL, NULL, &timeout);
bOK = (iRet > 0);
if(bOK)
{
bOK = FD_ISSET(m_hSocket, &readSocketSet);
}
if(bOK)
{
CHAR szBuffer[1] = "";
iRet = ::recv(m_hSocket, szBuffer, 1, MSG_PEEK);
bOK = (iRet > 0);
if(!bOK)
{
INT iError = ::WSAGetLastError();
bConnDropped = (( iError == WSAENETRESET) ||
(iError == WSAECONNABORTED) ||
(iError == WSAECONNRESET) ||
(iError == WSAEINVAL) ||
(iRet == 0));
}
}
return(bConnDropped);
}
|
多是心跳包。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。