[size=medium] c,c#判断socket是否断开[/size]
1)c#
2)c
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);
}