Como detectar uma desconexão do soquete em c #

Eu estou trabalhando em um relacionamento cliente / servidor que serve para empurrar dados para frente e para trás por um período de tempo indeterminado.

O problema que estou tentando superar está no lado do cliente, sendo que não consigo encontrar uma maneira de detectar uma desconexão.

Eu tomei alguns passes em soluções de outros povos, variando de apenas capturar Exceções de E / S para pesquisar o soquete em todos os três SelectModes. Eu também tentei usar uma combinação de uma pesquisa, com uma verificação no campo 'Disponível' do soquete.

// Something like this
Boolean IsConnected()
{
    try
    {
        bool part1 = this.Connection.Client.Poll(1000, SelectMode.SelectRead);
        bool part2 = (this.Connection.Client.Available == 0);

        if (part1 & part2)
        {
            // Never Occurs
            //connection is closed
            return false;
        }
        return true;
    }
    catch( IOException e )
    {
        // Never Occurs Either
    }
}

No lado do servidor, uma tentativa de escrever um caractere 'vazio' (\ 0) para o cliente força uma Exceção de IO e o servidor pode detectar que o cliente foi desconectado (tarefa bastante fácil).

No lado do cliente, a mesma operação não gera exceção.

// Something like this
Boolean IsConnected( )
{
    try
    {

        this.WriteHandle.WriteLine("\0");
        this.WriteHandle.Flush();
        return true;
    }
    catch( IOException e )
    {
        // Never occurs
        this.OnClosed("Yo socket sux");
        return false;
    }
}

Um problema que eu acredito ter detectado uma desconexão através de uma enquete, é que eu posso facilmente encontrar um falso em um SelectRead, se o meu servidor ainda não tiver escrito nada para o cliente desde a última verificação ... Não Certifique-se do que fazer aqui, eu tenho perseguido cada opção para fazer essa detecção que eu posso encontrar e nada foi 100% para mim e, finalmente, meu objetivo aqui é detectar uma falha de servidor (ou conexão), informar o cliente, espere para reconectar, etc. Então, eu tenho certeza que você pode imaginar que esta é uma parte integrante.

Aprecie as sugestões de qualquer um. Obrigado antes do tempo.

EDIT: Qualquer pessoa visualizando esta questão deve observar a resposta abaixo e meus comentários finais sobre ele. Eu elaborei sobre como eu superei este problema, mas ainda tenho que fazer um post no estilo 'Q & A'.

questionAnswers(1)

yourAnswerToTheQuestion