Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#14

AW: Socket-Verbindung herstellen ohne zu blockieren

  Alt 8. Mai 2018, 15:32
Danke für die Infos!

Ich habe hier jetzt leider ein großes Problem: Mein Socket im Thread will sich nicht verbinden, aber ein TClientSocket, der als Komponente auf meinem Formular liegt und exakt dieselben Settings hat kann dies ohne Probleme. Hier mal mein Thread:

Delphi-Quellcode:
constructor TSocketProbeThread.Create(aSocket: TClientSocket; aPauseTime: Integer);
begin
  inherited Create(false);
  FIP := aSocket.Host;
  FPort := aSocket.Port;
  FPauseTime := aPauseTime;
  FCS := TCriticalSection.Create;
end;

procedure TSocketProbeThread.Execute;
begin
  inherited;
  repeat
    FCS.Enter;
    try
      if not Assigned(FSocket) then
      begin
        FSocket := TClientSocket.Create(nil);
        FSocket.OnError := SocketError;
        FSocket.Host := FIP;
        FSocket.Port := FPort;
        FSocket.ClientType := ctNonBlocking;
      end;
      if (not FSocket.Active) then
      begin
        try
          FSocket.Active := true;
        except;
          Sleep(100);
        end;
      end;
    finally
      FCS.Leave;
    end;
    Sleep(FPauseTime);
  until Terminated;
end;
(Das Sleep(100) im except-Zweig ist nur für mich zum Haltepunkt setzen.)

Das Programm läuft ohne jeden Fehler zu generieren "FSocket.Active := true;" durch, aber .Active ist danach weiterhin false. Es wird weder der Except-Zweig betreten, noch wird OnError ausgelöst, und der Thread wird auch nicht weggeschossen. Er läuft brav weiter und versucht im gesetzten Intervall (10s im Moment) Active zu setzen, aber es bleibt einfach immer false. Ohne Fehler ohne alles.

Nehme ich den Socket, den ich im Create als Datenspender übergebe, welcher auf meinem Formular liegt, verbindet dieser sich sofort und ohne Probleme. Was mache ich hier falsch jetzt?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat