Einzelnen Beitrag anzeigen

Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#1

Indy: Verbindung trotz Disconnect nicht geschlossen?

  Alt 30. Okt 2006, 17:58
Hi,

ich entwickle momentan ein Programm, welches die Indy-Komponenten benutzt um Daten durchs Internet zu schicken. Die Wahl fiel nur auf die Indys, da sie SSL unterstützen und Quelloffen sind, ansonsten bin ich von ihnen leider nicht sehr begeistert, da ich irgendwie nicht damit klar komme...

Nun zum eigentlichen Problem: Bei mir läuft das Programm problemlos und beim Kunden sind irgendwann keine Internetverbindungen mehr möglich, das Programm meldet zuerst Connection refused, danach Timeout. Es scheint sich also der Router aufzuhängen.

Meine Vermutung ist nun, dass die Sockets nicht richtig zugemacht werden (das Programm macht für jede Datei einen auf, und davon sollen ca 500 versendet werden). In "netstat -an" werden sie definitiv noch als offen angezeigt, solange das Programm läuft.

Hier der entsprechende Sourcecode am Server:
Delphi-Quellcode:
procedure TServerForm.OnExecute(AThread: TIdThread);
begin
  // Weggelassen: Code um festzustellen, was für ein Request es ist
  HandleFileUpload(AThread);
  AThread.Connection.Disconnect;
end;
Und am Client:
Delphi-Quellcode:
FSocket.Disconnect;
FreeAndNil(FSocket);
Davor befinden sich einige ReadLn, WriteLn und WriteStream beziehungsweise ReadStream-Anweisungen auf beiden Seiten, sonst nichts. Der Socket wird folgendermaßen erzeugt:
Delphi-Quellcode:
function CreateSocket:TIdTCPClient;
begin
  result:=TIdTCPClient.Create(nil);
  with result do begin
    IOHandler:=TIdSSLIOHandlerSocket.Create(result);
    with TIdSSLIOHandlerSocket(IOHandler) do begin
      SSLOptions.Method:=sslvTLSv1;
      SSLOptions.Mode:=sslmClient;
      OnStatus:=SSLStatus;
    end;
    Host:=FHost;
    Port:=FPort;
  end;
end;
In netstat sieht das ganze dann so aus:
Code:
TCP   127.0.0.1:3001         127.0.0.1:1540         WARTEND
TCP   127.0.0.1:3001         127.0.0.1:1541         WARTEND
TCP   127.0.0.1:3001         127.0.0.1:1542         WARTEND
TCP   127.0.0.1:3001         127.0.0.1:1543         WARTEND
Woran kann das liegen / Was mache ich falsch?

Vielen Dank im Voraus und viele Grüße,
sECuRE
  Mit Zitat antworten Zitat