método de notificación de desconexión de socket

Acabo de buscar una solución posible para indetificar cuando el cliente se desconecta. encontré esto:

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

estoy usando un ciclo while en mi main con thread.sleep (500) y ejecuto el método Isconnected, funciona bien cuando lo ejecuto a través del estudio visual y cuando hago clic en detener la depuración, en realidad me notifica en el programa del lado del servidor, pero cuando solo voy al exe en el directorio bin y ejecútelo; de hecho, notifíqueme una conexión, pero cuando cierre el programa (manualmente desde el botón 'x') o mediante el administrador de tareas, elIsConnected Aparentemente, el método devuelve cierto ... estoy usando una conexión TCP simple

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

servidor:

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

            if (!IsConnected(s))


                MessageBox.Show("disconnected");
        }

(Se ejecuta en un hilo por cierto).

alguna sugerencia chicos? Incluso intenté cerrar la conexión cuando el cliente cierra:

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {

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

    }

No se que hacer

Respuestas a la pregunta(1)

Su respuesta a la pregunta