![]() |
Windows Socket sauber Schließen
Ich habe einen kleinen Server geschrieben der Anfragen an eine Datenbank ausführt und das Ergebnis zurück sendet.
Nun weis ich aber Leider nicht wie ich die zuvor aufgebaute Verbindung sauber schließe. Listener Thread zum Abhörchen nach Verbindungen:
Delphi-Quellcode:
Das Arbeitstier was so nicht funktioniert:
procedure T .Execute;
var fClient : TSockAddr; iRet, iLen : Integer; fReadSet : TFDSet; fTime : TTimeVal; ... ZeroMemory(@fClient, SizeOf(fClient)); iLen := SizeOf(fClient); fTime.tv_sec := 0; fTime.tv_usec := 1000 * 300; // warte 500 ms repeat FD_ZERO(fReadSet); FD_SET(iSocket, fReadSet); select(0, @fReadSet, nil, nil, @fTime); // Liegt was an?? if FD_ISSET(iSocket, fReadSet) then begin iRet := accept(iSocket, @fClient, @iLen); if iRet > 0 then // Anfrage in Thread ausführen TMDERequest.Create(iRet, inet_ntoa(fClient.sin_addr)); end; until Terminated; ...
Delphi-Quellcode:
Hilfe, ich bin zu doof dazu!
procedure TMDERequest.Execute;
... recv( ??? ); // Anfrage Empfangen ... send( ??? ); // Ergebnis Senden ... Sleep(2000); closesocket(iSocket); // Das funktioniert so nicht ? ... |
Re: Windows Socket sauber Schließen
Das Schließen eines Sockets ist immer ein Problem. Egal wie man es macht im Grunde unterbricht immer eine Seite, eg Client oder Server, die Verbindung.
Ich mache es so das der Client ein Kommando sendet das er den Socket schließen will. Darauf hin schließt der Server den Socket mit CloseSocket(). Der Client hat nach dem Senden des Kommandos noch zu warten, ca. 2 Sekunden, und schließt dann ebenfalls den Socket. Sinn der Übung ist es die mögliche Fehlermeldung das der Socket unterbrochen wurde, eg. in Indy "Connection closed gracefully", auf Client Seite zu verlagern. Damit wird also der Server entlastet. Sollte das TCP/IP Packet des Kommandos zum Schließen nicht innerhalb von 2 Sekunden vom Server bearbeitet wurden sein, so bekommt der Server obige Fehlermeldung. Sogesehen ist die Fehlermeldung im Indy garkein Fehler ansich. Gruß Hagen |
Re: Windows Socket sauber Schließen
Wert es mal so angehen!
Mal sehen! |
Re: Windows Socket sauber Schließen
So läuft es erstmal prima! Juhu!
Trotzdem, falls es noch andere Ideen gibt! Ich bin ganz Ohr! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz