In a previous post I showed how you can check if the other end of a TcpClient connection is unexpectedly disconnected.
I was migrating my game server from TcpClient to WebSockets, so I could host on a simple Azure Web app instead of having to pay for a virtual machine with additional ports open, when I realised I needed to be able to do the same thing or WebSockets.
public async Task<bool> GetIsAliveAsync()
{
if (IsDisposed) return false;
if (Client.State != WebSocketState.Open) return false;
if (Client.CloseStatus is not null) return false;
byte[] buffer = Array.Empty<byte>();
try
{
await Client.SendAsync(buffer, WebSocketMessageType.Text, endOfMessage: false, CancellationToken.None);
bool isAlive = (Client.State == WebSocketState.Open && Client.CloseStatus is null);
return isAlive;
}
catch (IOException)
{
return false;
}
catch (SocketException)
{
return false;
}
catch (OperationCanceledException)
{
return false;
}
}
It’s a bit of a cut-down version of my code because I am doing some other things in there too, but it should do the trick!

Comments