Таймаут TCP в C#
Короткий таймаут задают объектом CancellationTokenSource и передают его токен в ConnectAsync. Если по адресу 127.0.0.1 и порту 19999 никто не слушает, вызов заканчивается ошибкой:
using System.Net.Sockets;
using TcpClient client = new();
using CancellationTokenSource cts = new(TimeSpan.FromMilliseconds(500));
try
{
await client.ConnectAsync("127.0.0.1", 19999, cts.Token);
}
catch (Exception ex) when (ex is OperationCanceledException or SocketException)
{
Console.WriteLine("cancelled");
}
На Linux отказ соединения может прийти как
SocketException, а не только как отмена
токена - обрабатывают оба варианта.