Linux c Socket erholt sich nicht nach connect und errno == EINTR



  • Hi Leute,

    ich habe mir eine Funktion geschrieben, mit der ich zwischen meinem Raspberry Pi und einer Java Applikation auf meinem PC kurze Befehle austausche.

    Dies funktioniert auch sehr gut, bis ich den PC herunterfahre und wieder starte.

    Dann bekomme ich beim Aufruf von connect den Fehler EINTR in errno. Soviel ich gelesen habe, soll man mittels select "warten" und anschließend den Verbindungsaufbau via connect erneut versuchen. Aber auch das hilft nicht. Auch ein Neustart der c Applikation reicht nicht. Erst wenn ich den Raspberry herunterfahre und wieder neu starte funktioniert alles wieder.

    Also scheint irgend etwas hängen zu bleiben. Wie kann ich mit meinem c Programm wieder lösen?

    Vielen Dank schonmal!



  • moin, prinzipiell ist source code immer eine gute Unterstützung für diejenigen, die helfen wollen.
    Ich gehe davon aus, auf dem Raspberry Pi läuft der Socket Server?
    Folgendes Problem: Dein Server hat einen Netzwerkport gelockt und nicht wieder richtig frei gegeben. Auch das Beenden des Prozesses gibt diesen Port nicht frei.

    Du kannst beispielsweise versuchen, die Interruptsignale des Betriebssystems (signals.h) abzufangen und dort in jedem Falle den Server Socket schließen.



  • @thomasfischer25 sagte in Linux c Socket erholt sich nicht nach connect und errno == EINTR:

    Hi Leute,

    ich habe mir eine Funktion geschrieben, mit der ich zwischen meinem Raspberry Pi und einer Java Applikation auf meinem PC kurze Befehle austausche.

    falsches forum?

    Dann bekomme ich beim Aufruf von connect den Fehler EINTR in errno.

    du meinst, der raspberry pi soll sich zu deinem pc verbinden? wie kommst du auf sowas? also es geht bestimmt, aber es hört sich merkwürdig an.

    Soviel ich gelesen habe, soll man mittels select "warten" und anschließend den Verbindungsaufbau via connect erneut versuchen.

    wo hast du das denn gelesen? man ruft connect auf und wenn das fehlschlägt, wartet man eine gewisse zeit und ruft danach erneut connect auf. wenn das programm nicht stehen bleiben soll, wenn keine daten empfangen wurden, dann erstell dir den socket als nonblock und werte den rückgabewert von read aus.

    Also scheint irgend etwas hängen zu bleiben. Wie kann ich mit meinem c Programm wieder lösen?

    wie wäre es damit, ein vernünftiges buch zu lesen und es dann richtig zu machen? literaturempfehlungen: "systemprogrammierung unter linux/unix", "unix-netzwerkprogrammierung mit threads, sockets und ssl"


Anmelden zum Antworten