2017-02-23 2 views
0

Kann die socket() Funktion mit EINPROGRESS in Linux fehlschlagen? Beachten Sie, dass ich speziell über socket(), nicht connect() oder andere Fragen stelle.Kann Socket() mit EINPROGRESS fehlschlagen

POSIX listet nicht EINPROGRESS als möglichen Fehlercode auf. Die Hilfeseite für socket() in Linux sagt jedoch:

Andere Fehler können von den zugrunde liegenden Protokollmodulen generiert werden.

Gibt es Umstände, unter denen dieser Anruf tatsächlich mit EINPROGRESS fehlschlagen kann?

+0

Ich sehe nicht wie. Es gibt nichts dafür. Es gibt keine I/O-Vorgänge: nur die Erstellung eines Sockets FD. Warum fragst du? – EJP

+1

Ich denke, die Manpage ist hier eindeutig: Es kann Protokolle geben, die tatsächlich 'EINPROGRESS' bei einem Aufruf von' socket() 'zurückgeben. Aber keines der üblicherweise verwendeten Protokolle tut dies. Es ist unmöglich, den Referring-Dateideskriptor dann zurückzugeben, also musste es ein schwerer Fehler sein, der etwas mit der Bedeutung von "EINPROGRESS" kollidiert – Ctx

Antwort

0

EINPROGRESS bedeutet, dass der Vorgang gerade ausgeführt wird. Es würde aus einem externen Grund blockieren: Warten auf eine Remote-Aktion oder ein lokales Gerät.

socket() erstellt nur einen Eintrag im Speicher des Systems: Es gibt keinen Grund, auf eine Fernaktion oder ein Gerät zu warten.

Aber wenn es EINPROGRESS zurückgeben könnte, hätten Sie nichts zu warten.

Mit Dateihandles und Socket-Handles können Sie select() verwenden, um darauf zu warten, dass das System bereit ist. Aber wenn der Socket() selbst nichts zurückgibt, haben Sie nichts zu warten.

Ich sehe keinen Grund für socket(), um EIPROGRESS zurückzugeben, aber es wäre sowieso eine schlechte Idee.

0

Vielleicht nicht die Antwort, die Sie gesucht haben:

Sie finden die entsprechenden Linux kernel source code (kernel/net/socket.c) throughly sicher zu sein, 100% haben zu überprüfen. Ein Blick durch den Code sieht nicht so aus, als ob EINPROGRESS irgendwo zurückgegeben wird. Es sind jedoch laufzeitabhängige Aufrufe vorhanden, so dass es schwierig ist, dies nur anhand der statischen Codeanalyse zu sagen.

Verwandte Themen