判断客户端是否断开

155 views 七月 25, 05 by Timothy

BOOL CMySocket::IsDropped()
{
BOOL bDropped = FALSE;
INT iRet = 0;
BOOL bOK = TRUE;

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();
bDropped = ( ( iError == WSAENETRESET ) ||
( iError == WSAECONNABORTED ) ||
( iError == WSAECONNRESET ) ||
( iError == WSAEINVAL ) ||
( iRet == 0 ) ); //Graceful disconnect from other side.
}
}

return( bDropped );
}

分享到:

声明: 此Blog中的文章和随笔仅代表作者在某一特定时间内的观点和结论,对其完全的正确不做任何担保或假设
本站文章均采用 知识共享署名-相同方式共享3.0 协议进行授权,除非注明,本站文章均为原创,转载请注明转自 Timothy's Space 并应以链接形式标明本文地址!

你可能也对下列文章感兴趣

  • 没有相关文章!

<

这篇文章还没有人评论... 赶快来抢沙发吧!.


Leave a Reply

 您已输入0

(Ctrl+Enter)