Erkennen einer Socket-Trennung in C #

Ich arbeite an einer Client / Server-Beziehung, die Daten auf unbestimmte Zeit hin und her pushen soll.

Das Problem, das ich zu überwinden versuche, liegt auf der Clientseite: Ich kann keine Möglichkeit finden, eine Unterbrechung zu erkennen.

Ich habe ein paar Versuche mit Lösungen anderer Leute unternommen, angefangen beim Erfassen von E / A-Ausnahmen bis hin zum Abfragen des Sockets in allen drei SelectModes. Ich habe auch versucht, eine Kombination aus einer Umfrage und einem Häkchen im Feld "Verfügbar" des Sockets zu verwenden.

// 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
    }
}

Auf der Serverseite erzwingt der Versuch, ein 'leeres' Zeichen (\ 0) an den Client zu schreiben, eine E / A-Ausnahme, und der Server kann feststellen, dass der Client die Verbindung getrennt hat (ziemlich einfacher Vorgang).

Auf der Clientseite macht derselbe Vorgang keine Ausnahme.

// 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;
    }
}

Ein Problem, das meiner Meinung nach beim Erkennen einer Verbindungsunterbrechung bei einer Umfrage auftritt, besteht darin, dass bei einem SelectRead ziemlich leicht eine falsche Angabe auftritt, wenn mein Server seit der letzten Überprüfung noch nichts an den Client zurückgeschrieben hat ... Nein Ich bin mir sicher, was hier zu tun ist. Ich habe jede Option verfolgt, um diese Erkennung durchzuführen, die ich finden kann, und nichts war zu 100% für mich. Letztendlich ist es mein Ziel, hier einen Server- (oder Verbindungs-) Fehler zu erkennen, und den Client zu informieren. Warten Sie, bis die Verbindung wieder hergestellt ist usw. Sie können sich also sicher vorstellen, dass dies ein integraler Bestandteil ist.

Schätzen Sie alle Vorschläge. Vielen Dank im Voraus.

BEARBEITEN: Jeder, der diese Frage sieht, sollte die Antwort unten und meine SCHLUSSKOMMENTARE dazu beachten. Ich habe dargelegt, wie ich dieses Problem bewältigt habe, aber noch keinen Beitrag im Q & A-Stil verfasst.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage