Netzwerkverbindung manuell schließen?



  • Hallo,

    ich habe ein kleines Prog das über Sockets kommuniziert. Nun kommt es in der Testphase desöfteren zu plötzlichen Abbrüchen (desterwejen ja Testphase), wobei das geöffnete Socket nicht geschlossen wird... Möchte ich das Prog dann nach 30 Sekunden erneut testen, bekomme ich die Socket-Exception #10048 und muss warten, bis das Socket geschlossen wird (**(1)**weil Windows es irgendwann schließt?).

    (2) Gibt es einen Befehl für die Eingabeaufforderung, mit dem ich die Verbindung manuell schließen kann, um dann gleich weiter testen zu können?

    MfG



  • Hallo,

    ein paar Details mehr wären zur Hilfe recht nützlich.
    Um eine Verbindung manuell zu schließen, verwendest du die close() Funktion deines Sockets.
    Tust du das nicht, wird die Socketverbindung bei Beendigung deines Prozesses geschlossen.



  • Unter Linux/Unix hilft da die Option SO_REUSEADDR, die man mittels man: setsockopt(2) setzen kann.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hmm... soviel hab ich doch garnicht geschrieben - das kann man sich doch wirklich durchlesen, wenn man schon so nett ist und helfen will:

    ich schrieb:

    ...kommt es in der Testphase desöfteren zu plötzlichen Abbrüchen (desterwejen ja Testphase), wobei das geöffnete Socket nicht geschlossen wird...

    @Headhunter: (3) Wie soll ich da die Close()-Funktion noch nutzen? Es wird kein Programmcode mehr ausgeführt... Oder weiß ich da was nicht?

    Headhunter schrieb:

    Tust du das nicht, wird die Socketverbindung bei Beendigung deines Prozesses geschlossen.

    Wenn's so wäre, würd' ich nicht nach nem Befehl fragen mit dem ich das Socket über die Eingabeaufforderung schliessen kann! Die Verbindung bleibt noch eine ganze Weile bestehen, bevor sie freigegeben wird (wodurch auch immer).

    rüdiger schrieb:

    Unter Linux/Unix hilft da die Option SO_REUSEADDR, die man mittels setsockopt(2) setzen kann.

    In meiner Signatur steht doch WinXP... Oder kann man da auch manche Linux/Unix-Befehle nutzen?

    C++ Forumbot schrieb:

    Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.

    Wozu? Das ist bei weitem keine Programmierfrage! 😮

    Entschuldigt die Nörgelei, aber da kann man ja graue Haare kriegen...
    Meine Frage (2) steht nach wie vor im Raum!

    MfG



  • In meiner Signatur steht doch WinXP... Oder kann man da auch manche Linux/Unix-Befehle nutzen?

    Du könntest schauen ob es diese Option auch für das WinXP aus deiner Signatur gibt. Immerhin ist ein großteil der Socket-API von Windows der Unix-Sachen nachempfunden.

    Aber wie schon gesagt zu deinem Problem: Das Socket wird eh geschlossen. Der Kernel verhindert (aus Sicherheitsgründen) nur ein sofortiges erneutes binden an den Port. Du könntest natürlich auch einfach immer die Ports durchwechseln beim testen...



  • rüdiger schrieb:

    ...Immerhin ist ein großteil der Socket-API von Windows der Unix-Sachen nachempfunden. ... Der Kernel verhindert (aus Sicherheitsgründen) nur ein sofortiges erneutes binden an den Port.

    Wieder was gelernt! Danke 🙂

    rüdiger schrieb:

    Du könntest natürlich auch einfach immer die Ports durchwechseln beim testen...

    Das geht leider nicht. Das Modul mit dem das Prog kommuniziert kann nur auf einem Port kommunizieren und eine Umstellung des eingestellten Ports ist zwar möglich, aber noch aufwändiger als auf die Freigabe des alten Ports zu warten.

    Dann muss ich halt warten...

    Was jetzt wirklich noch helfen könnte wäre eine Antwort auf die Frage in "Prog steht bei MessageHandle" im VCL-Forum.

    MfG



  • Kolumbus schrieb:

    rüdiger schrieb:

    ...Immerhin ist ein großteil der Socket-API von Windows der Unix-Sachen nachempfunden. ... Der Kernel verhindert (aus Sicherheitsgründen) nur ein sofortiges erneutes binden an den Port.

    Wieder was gelernt! Danke 🙂

    das geht oft schneller, wenn man auf den Input hier mal Google ansetzt, anstelle rumzunörgeln :p



  • Das Problem mit uns Anfängern (meint mich) ist: Wenn ich mir eine Sache überhaupt nicht vorstellen kann, benutze ich die Suchmaschine nicht!

    Hätte das mit der Socket-API von Windows gleich im ersten Post von Dir zu diesem Thema gestanden (sprich: die Information wäre vollständig gewesen), wäre ich EVTL auch von selbst darauf gekommen mal zu suchmaschinieren. :p

    MfG


Anmelden zum Antworten