способ уведомления о разъединении сокета

только что искал подходящее решение, чтобы выяснить, когда клиент отключается. я нашел это:

        public bool IsConnected( Socket s)
    {
        try
        {
            return !(s.Poll(1, SelectMode.SelectRead) &&s.Available == 0);
        }
        catch (SocketException) { return false; }
    }

Я использую цикл while в моей основной программе с помощью thread.sleep (500) и запускаю метод Isconnectedm. Он работает нормально, когда я запускаю его в Visual Studio, и когда я нажимаю «Стоп отладка», он на самом деле уведомляет меня в программе на стороне сервера, но когда я просто иду. в exe в каталоге bin и запустите его - это действительно уведомляет меня о подключении, но когда я закрываю программу (вручную с помощью кнопки «x») или через диспетчер задач,IsConnected метод, по-видимому, возвращает все еще true ..... я использую простое соединение TCP

        client = new TcpClient();
         client.Connect("10.0.0.2", 10);

сервер:

Socket s = tcpClient.Client;
        while(true)
        {

            if (!IsConnected(s))


                MessageBox.Show("disconnected");
        }

(это работает на потоке между прочим).

Любое предложение, ребята? я даже пытался закрыть соединение, когда клиент закрывается:

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {

        client.Close();
        s.Close();
        Environment.Exit(0);

    }

не знаю что делать

Ответы на вопрос(1)

Ваш ответ на вопрос