Broken Pipe - Was hat das zu bedeuten?
-
Hi,
ich habe ein Programm in C geschrieben, welches epoll nutzt. Es nimmt ca. 300 Sockets an. Alle 10 Sekunden werden weitere 300 Sockets angenommen, die etwas an das Programm senden, welches diesen Inhalt verarbeitet und an manche der ersten 300 Sockets versendet. Die letzten 300 Sockets werden dann sofort wieder geschlossen. D.h. es gibt zu jeder Zeit mindestens 300 und höchstens 600 Sockets, wobei die ersten 300 immer dieselben sind, weil sie durchgängig verbunden bleiben.
So, nur kommt manchmal die Fehlermeldung "Broken Pipe" und das Programm bricht ab, woran könnte das liegen?
MfG
-
Normalerweise liegt's daran, dass Du in eine bereits geschlossene Verbindung schreibst oder versuchst zu lesen, nachdem read 0 returnt hat.
Entweder: Vernünftige Fehlerbehandlung.
Oder: Signal catchen und auf Rückgabewert von read / write etc. reagieren.
-
Also die Verbindungen werden normalerweise sofort geschlossen, wenn recv 0 oder -1 zurückliefert.
Kann ich denn irgendwie vermeiden, dass dadurch das ganze Programm abstürzt?
-
Wie gesagt, das dazugehörige Signal catchen - also SignalHandler installieren usw. .
Hast Du noch nicht im Debugger geschaut, wo es genau abstürzt? Das Signal sollte SIGPIPE sein.
-
Hi,
also ich habe jetzt mit signal(SIGPIPE, diefunktion) den catcher installiert, aber trotzdem kommt die Fehlermeldung "Broken Pipe" und das programm stürzt ab. Was kann ich da machen?
MfG
-
Kann mir keiner helfen?