`

[size=medium] c,c#判断socket是否断开[/size]

 
阅读更多
                   c,c#判断socket是否断开
1)c#
//判断是否连接
        public bool IsConnected()
        {
            if (_socket == null)
            {
                return false;
            }
            else if (!SocketIsConnected)
            {
                return false;
            }
            else
            {
                return !((_socket.Poll(1000, SelectMode.SelectRead) && (_socket.Available == 0)) || !_socket.Connected);
            }
        }


C# TcpClient在连接成功后无法检测连接状态,即使对方关闭了网络连接。以下扩展可检测连接状态:

static class TcpClientEx {

public static bool IsOnline(this TcpClient c) {

return !((c.Client.Poll(1000, SelectMode.SelectRead) && (c.Client.Available == 0)) || !c.Client.Connected);

}

}


2)c
int SocketWorker::Recv(char *buf,int bufLen)
{
 	int nread = 0;
 	int nleft = bufLen;
	char *ptr = buf;
	try{
		while(nleft > 0){
    		nread = recv(_socket,ptr,nleft,0);
			if(nread < 0) {
				THROW_RUNTIME_EX(StringHandler::catStrAndDword("socket recv: errno=",WSAGetLastError()));
			}
			if (nread == 0) {
				break; //eof
			}
    		ptr += nread;
    		nleft -= nread;
		}
	}catch(RunTimeException & rtex){
		//ERROR_NET(rtex.what());
		throw;
	}catch(...){
		try{
			//ERROR_NET("SocketWorker::Recv(char *buf,int bufLen)未知异常");	
		}catch(...){}
	}
	return (bufLen - nleft);
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics