eg.
BOOL CClientSocket::HasConnectionDropped( void )
{
BOOL bConnDropped = 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();
bConnDropped = ( ( iError == WSAENETRESET ) ||
( iError == WSAECONNABORTED ) ||
( iError == WSAECONNRESET ) ||
( iError == WSAEINVAL ) ||
( iRet == 0 ) ); //Graceful disconnect from other side.
}
}
return( bConnDropped );
}
BOOL CClientSocket::HasConnectionDropped( void )
{
BOOL bConnDropped = 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();
bConnDropped = ( ( iError == WSAENETRESET ) ||
( iError == WSAECONNABORTED ) ||
( iError == WSAECONNRESET ) ||
( iError == WSAEINVAL ) ||
( iRet == 0 ) ); //Graceful disconnect from other side.
}
}
return( bConnDropped );
}
解决方案 »
- 救命 ,画复合多边形
- 如何通过IHTMLDocument2接口获得网页页面边距
- 急求助:flash控件(CShockwaveFlash)播放时如何把每帧的图片保存下来,然后转换为BMP图片格式???望大家多多指点。。。
- vc运行环境问题
- 微软这个算不算是愚弄观众呢?
- CListCtrl如何在程序中改变各个column的顺序?
- ADO insert into问题!
- 谁有《MFC Windows 程序设计》电子版?
- “因为高速缓存使用环形链表结构来存储数据”怎么理解,望赐教!
- 急急急!!!web服务与数据库服务问题(急急急,有回答一律给分)
- 请问如何在一台电脑上调试Socket API写的有连接的流式程序
- 在一个文件视图里面,如何双击打开文件?(像浏览器那样)
而直接用SOCKET,
这样你可以直接开一个线程来接收数据。
这种方法很直观。
比如:
while(1)
{
recv(sockRecv, ...);
nError = GetLastError();
if(nError == 0)
{
//收到数据
}
else
if(nError == 10035)
{
//数据阻塞
continue;
}
else
{
//非正常断线
}
}我的大部分程序都是这样写的。
http://microserver.top263.net
我开始只想到发数据才会检到网断,没想到用收的也行。>:)cctime写的看得不太懂,嘿嘿