Given a TcpClient instance, I really needed to know ASAP if the other end of the connection had disappeared / disconnected unexpectedly, or something else that causes the communication to be broken.
public bool GetIsAlive()
{
if (TcpClient.Client is null) return false;
if (IsDisposed) return false;
try
{
TcpClient.Client.Blocking = false;
bool hasDisconnected = TcpClient.Client.Poll(0, SelectMode.SelectRead) && TcpClient.Client.Available == 0;
return !hasDisconnected;
}
catch (SocketException)
{
return false;
}
}
This seems to do the trick very nicely.

Comments