2016-04-20 7 views
-1

In inkonsistenten Zeitabständen habe ich gesehen, dass ein bestimmtes Programm in letzter Zeit aufgehängt wurde (das heißt, Ausführung anhalten, aber nicht abstürzen und die CPU nicht drehen). Bei Beendigung mit Core-Dumps gezwungen wird, wird es auf dieser Linie konsequent fest:Hung-Programm auf einem nicht-blockierenden Sockel

int new_socket = accept4(listen_socket,NULL,NULL,SOCK_NONBLOCK); 

Da es sich um eine nicht-blockierende akzeptieren, wie kann es das Programm aufzulegen? Es scheint nicht so, als ob sich die Betriebsbedingungen dramatisch zwischen funktionaler und angehaltener Ausführung ändern.

Ich bin kein Netzwerkprogrammierungsexperte, also lassen Sie mich bitte wissen, welche andere Quelle (falls vorhanden) einen Kontext für das Aufspüren dieser Daten liefern würde.

EDIT: Diese Software läuft auf und mit dem

$ uname -a 
Linux phoenix 3.16.0-30-generiC#40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 

$ g++ --version 
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2 

$ ldd --version 
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19 
+0

Welche Sprache ist das in, C oder C++? – Vality

+0

Es ist sehr C-style C++, aber es ist mit g ++ kompiliert, so ist es, was es ist. Ich war breit mit den Tags, weil ich dachte Sockets war ... nun, breit. =) – musasabi

+0

Ah, fair genug. Es ist nichts wert, die bevorzugte Norm afaik hier ist, nur ein einziges "Sprach-Tag" zu verwenden, ausgenommen Fragen speziell zur Sprachkompatibilität. Trotzdem, lass es dir überlassen. – Vality

Antwort

3

Die Option, die Abhörsocket (die weitergegeben accept4()), sondern auf die einem erstellten Einsteigen Annahme SOCK_NONBLOCK nicht von verweisen folgenden zusammengestellt eine Verbindung.

Verbatim von man accept4:

SOCK_NONBLOCK Stellen Sie die O_NONBLOCK Datei Status-Flag auf der neuen offenen Dateibeschreibung.