å½Socket.Conneted == falseæ¶ï¼è°ç¨å¦ä¸å½æ°è¿è¡å¤æï¼
///
/// å½socket.connected为falseæ¶ï¼è¿ä¸æ¥ç¡®å®ä¸å½åè¿æ¥ç¶æ
///
///
private bool IsSocketConnected()
{
#region remarks
/********************************************************************************************
* å½Socket.Conneted为falseæ¶ï¼ å¦ææ¨éè¦ç¡®å®è¿æ¥çå½åç¶æï¼è¯·è¿è¡éé»å¡ãé¶åèç Send è°ç¨ã
* å¦æ该è°ç¨æåè¿åæå¼å WAEWOULDBLOCK é误代ç (10035)ï¼å该å¥æ¥åä»ç¶å¤äºè¿æ¥ç¶æï¼
* å¦åï¼è¯¥å¥æ¥åä¸åå¤äºè¿æ¥ç¶æã
* Depending on
********************************************************************************************/
#endregion
#region è¿ç¨
// This is how you can determine whether a socket is still connected.
bool connectState = true;
bool blockingState = socket.Blocking;
try
{
byte[] tmp = new byte[1];
socket.Blocking = false;
socket.Send(tmp, 0, 0);
//Console.WriteLine("Connected!");
connectState = true; //è¥Sendé误ä¼è·³å»æ§è¡catchä½ï¼èä¸ä¼æ§è¡å
¶tryä½éå
¶ä¹åç代ç
}
catch (SocketException e)
{
// 10035 == WSAEWOULDBLOCK
if (e.NativeErrorCode.Equals(10035))
{
//Console.WriteLine("Still Connected, but the Send would block");
connectState = true;
}
else
{
//Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
connectState = false;
}
}
finally
{
socket.Blocking = blockingState;
}
//Console.WriteLine("Connected: {0}", client.Connected);
return connectState;
#endregion
}