Indy Client bekommt Serverabbruch nicht mit



  • Hallo Zusammen,

    ich hoffe ihr könnt mir mal wieder weiter helfen.

    Ich verbinde mich per TIdTCPClient mit einem Server. Soweit funktioniert auch alles. Daten werden ausgetasucht, alles super.

    Wenn ich jetzt aber den Server schließe, bekommt der Client das nicht mit. Ich finde keine Möglichkeit abzufragen ob der Socket noch verbunden ist.

    Client->Socket->Connected bleibt auf true. OnDisconnect wird nicht aufgerufen. Wenn ich nicht weiß das der Server down ist, kann ich natürlich auch nicht meinen ganzen Read und Write funktionen bremsen.

    Jemand eine Idee wie ich herausfinde ob der Socket noch verbunden ist?

    Danke schonmal



  • Weißt du denn wie groß der Timeout ist ?



  • ReadTimeout ist bei mir 0 und OnDisconnected wird ausgelöst



  • Also hier mal die minimalbesetzung:

    void __fastcall TForm_Main::IdTCPClient1Connected(TObject *Sender)
    {
    	ListBox1->Items->Add("Connect");
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm_Main::IdTCPClient1Disconnected(TObject *Sender)
    {
    	ListBox1->Items->Add("DisConnect");
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm_Main::IdTCPClient1Status(TObject *ASender, const TIdStatus AStatus,
    		  const UnicodeString AStatusText)
    {
    	ListBox1->Items->Add(AStatusText);
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm_Main::Button2Click(TObject *Sender)
    {
    	IdTCPClient1->Port=3001;
    	IdTCPClient1->Host="localhost";
    	IdTCPClient1->ReadTimeout=0;
    
    	IdTCPClient1->Connect();
    }
    //---------------------------------------------------------------------------
    

    Ich Starte den Server (anderes Programm).

    Drücke Button2
    Verbindung wird aufgebaut und gehalten (mit TCPView kontrolliert)
    ich schließe den Server, nichts passiert.
    TCPView meldet im Status vom Client CLOSE_WAIT
    der Client meldet immer noch nichts.

    ich muss ja echt sagen das mit das Indy noch den letzten nerv raubt...

    Ach übrigens ich nutze Indy 10



  • Falls du nicht alles in einem eigenen Thread ausgelagert hast dann zieh mal das Indy Antifreeze mit auf die Form


Anmelden zum Antworten