C# TCP-сервер не реагирует на отключение клиентов

На C# есть сервер TCP, который постоянно ждет новых подключений, данные пока не отправляет. Клиентом выступают ардуинки, которые подключены к коммутатору. При запуске сервера и старте ардуино идет подключение клиентов, но когда я начинаю отключать клиентов, то никакой реакции со стороны сервера нет вообще.

class Program
    {

        const int port = 8888; // порт для прослушивания подключений
        static void Main()
        {
            TcpListener server = null;
            try
            {
                IPAddress localAddr = IPAddress.Parse("192.168.0.100");
                server = new TcpListener(localAddr, port);

                server.Start();
                var clients = new List<TcpClient>();

                while (true)
                {
                    Console.WriteLine("Ожидание подключений... ");

                    // получаем входящее подключение
                    TcpClient client = server.AcceptTcpClient();
                    clients.Add(client);
                    Console.WriteLine("Подключен клиент.");
                    Console.WriteLine("Кол-во подключенных клиентов: " + clients.Count);

                    Task.Run(async() =>
                    {
                        var blocking = client.Client.Blocking;
                        do
                        {

                            try
                            {
                                byte[] tmp = new byte[1];

                                client.Client.Blocking = false;
                                client.Client.Send(tmp, 0, 0);
                                Console.WriteLine("Подключен!");
                            }
                            catch (SocketException e)
                            {

                                if (e.NativeErrorCode.Equals(10035))
                                    Console.WriteLine("Подключен!");
                                else Console.WriteLine("Не подключен!");
                                break;
                            }
                            finally
                            {
                                client.Client.Blocking = blocking;
                            }
                            await Task.Delay(1000);
                        }
                        while (true);
                    });
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                if (server != null)
                    server.Stop();
            }
        }
    }

Ответы (0 шт):