método de notificação de desconexão de soquete

procurei apenas uma solução possível para identificar quando o cliente desconecta. Eu achei isto:

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

Estou usando um loop while no meu main com thread.sleep (500) e executando o método Isconnected, ele funciona bem quando eu o executo no visual studio e quando clico em parar de depurar ele realmente me notifica no programa do lado do servidor, mas quando eu apenas vou para o exe no diretório bin e inicie-o - é, de fato, me avise sobre uma conexão, mas quando fecho o programa (manualmente a partir do botão 'x') ou através do gerenciador de tarefas, oIsConnected método aparentemente retorna ainda verdadeiro ..... estou usando uma conexão tcp simples

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

servidor:

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

            if (!IsConnected(s))


                MessageBox.Show("disconnected");
        }

(está sendo executado em um thread btw).

alguma sugestão pessoal? Eu até tentei fechar a conexão quando o cliente fecha:

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {

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

    }

não sei o que fazer

questionAnswers(1)

yourAnswerToTheQuestion