Seite 1 von 1

[gelöst] QSocket ständig im Satus CONNECTING

Verfasst: 10. Dezember 2007 08:30
von stonecold
Hallo,

ich hatte ja bereits in der vergangenen Woche einige Fragen gepostet.
Nun ist folgendes mein Problem.

Ich versuche mit einem QSocket auf einen "herkömmlichen" Socket zu zu greifen. (Ich habe die Gegenstelle nicht selbst implementiert, ist halt ein Standard Linux Socket)

Erst ist es nicht so aufgefallen, da das Verbinden augenscheinlich und auch das Senden der Daten funktioniert hat. Irgendwann habe ich bemerkt, dass die Signals connected() und connectionClosed() nicht vom QSocket gesendet werden, was etwas schlecht für die weitere Verwendung ist.
Einige Ausgaben zeigen, dass sich der QSocket nach dem versucht wird eine Verbindung auf zu bauen die gesamte Zeit im im Status "CONNECTING" befindet, also nie in den Staus CONNECTED wechselt.

Kann mir vielleicht einer sagen wo evtl. das Problem liegt, oder hatte jemand schon mal ein ähnliches Problem? Benötigt Ihr ein Codebeispiel????

Vielen Dank für Antworten und schöne Grüße....

Verfasst: 10. Dezember 2007 09:39
von DeepDiver
Hi,

Beispielcode könnte hier wirklich helfen ...

CU Tom

Verfasst: 10. Dezember 2007 11:12
von stonecold
Hallo Tom,

danke für die schnelle Antwort.
Das Problem mit den connecting scheint gelöst zu sein. Ich weiß es nicht genau aber evtl. gab es ein Problem mit konkurrierenden Portnutzern.

Nun habe ich aber schon wieder ein neues Problem und zwar bricht mein Prog mit der Fehlermeldung "Broken Pipe" ab wenn ich versuche Daten an einen noch nicht verbundenen Empfänger zu senden. Kannst du dir das erklären? Ich meine
"int error = socket->writeBlock( data, msgSize );" Sollte doch einen Fehlercode liefern wenn was nicht geklappt hat und nicht das Programm zum Erlegen bringen oder???

Verfasst: 11. Dezember 2007 17:47
von solarix
stonecold hat geschrieben:Nun habe ich aber schon wieder ein neues Problem und zwar bricht mein Prog mit der Fehlermeldung "Broken Pipe" ab wenn ich versuche Daten an einen noch nicht verbundenen Empfänger zu senden.
Das (Unix-)Signal wird vom Kernel geschmissen.. man wuerde meinen, das sollte von Qt sauber abgefangen werden (wie du schon gedacht hast..). Evt. hilft der workaround, dass du den Signal-Handler ueberlaedst und dadurch den Programmabruch verhinderst.. der Code ist damit jedoch weniger portabel. Hilfe zur Signal-Behandlung: "man signal" in de Konsole..

[edit]
"writeBlock()" scheint Qt3 zu sein... mit Qt4 sollte man offenbar "write()" nehmen..

Verfasst: 12. Dezember 2007 07:22
von stonecold
Danke für die Antwort.

Ich hab's jetzt so gemacht, dass ich vor jedem Senden nochmal den Status des Sockets abfrage.... und ggf. garnicht erst sende.

Ja ich benutze Qt 3.3 (gezwungener Maßen).