AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Windows Socket sauber Schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Socket sauber Schließen

Ein Thema von neolithos · begonnen am 13. Feb 2004 · letzter Beitrag vom 13. Feb 2004
Antwort Antwort
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#1

Windows Socket sauber Schließen

  Alt 13. Feb 2004, 11:11
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:
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;
    ...
Das Arbeitstier was so nicht funktioniert:

Delphi-Quellcode:
procedure TMDERequest.Execute;
...
   recv( ??? ); // Anfrage Empfangen
...
   send( ??? ); // Ergebnis Senden
...
    Sleep(2000);
    closesocket(iSocket); // Das funktioniert so nicht ?
...
Hilfe, ich bin zu doof dazu!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Windows Socket sauber Schließen

  Alt 13. Feb 2004, 13:54
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
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#3

Re: Windows Socket sauber Schließen

  Alt 13. Feb 2004, 14:11
Wert es mal so angehen!

Mal sehen!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: Windows Socket sauber Schließen

  Alt 13. Feb 2004, 14:36
So läuft es erstmal prima! Juhu!

Trotzdem, falls es noch andere Ideen gibt! Ich bin ganz Ohr!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz