Wie erfahre ich, wenn epoll_wait EPOLLERR zurückgibt?

8

Gibt es eine Möglichkeit, das errno herauszufinden, wenn epoll_wait EPOLLERR für ein bestimmtes fd zurückgibt?

Gibt es weitere Informationen über die Art des Fehlers?

Bearbeiten:

Hinzufügen weiterer Informationen zur Vermeidung von Mehrdeutigkeiten

epoll_wait wartet auf eine Reihe von Dateideskriptoren. Wenn Sie epoll_wait aufrufen, übergeben Sie ihm ein Array von epoll_event structures:

%Vor%

Die epoll_data_t -Struktur hat dieselben Details wie die, die Sie mit epoll_ctl verwendet haben, um epoll einen Dateideskriptor hinzuzufügen:

%Vor%

Was ich suche ist, was passiert, wenn ein Fehler in einem der Dateideskriptoren auftritt, auf die epoll wartet.

ie: epoll_event.events & EPOLLERR == 1 - Gibt es eine Möglichkeit, mehr Details über den Fehler im Dateideskriptor herauszufinden?

    
Steve Lorimer 31.10.2012, 02:20
quelle

4 Antworten

14

Verwenden Sie getsockopt und SO_ERROR, um den ausstehenden Fehler auf dem Socket zu erhalten

%Vor%     
Vestman 21.03.2013, 07:30
quelle
0

Nur ein kleiner Punkt: Ihr Test wird aus zwei Gründen nicht korrekt funktionieren. Wenn EPOLLERR beispielsweise als 0x8 definiert ist, vergleicht Ihr Test 8 mit Eins (da == höhere Priorität hat als & amp;), und gibt Ihnen eine Null, und dann das mit der Ereignismaske.

Was Sie wollen, ist: (epoll_event.events & amp; EPOLLERR)! = 0, um zu testen, ob das EPOLLERR-Bit gesetzt ist.

    
user2525554 26.06.2013 19:10
quelle
-1

epoll_wait gibt -1 zurück, wenn ein Fehler auftritt, und setzt errno entsprechend. Siehe "man 2 epoll_wait" für weitere Informationen.

    
Danil Onishchenko 31.10.2012 05:14
quelle
-4

Fügen Sie errno.h ein und verwenden Sie perror, um die Fehlermeldung zu sehen. Grundsätzlich ist der Fehler von der EPFD oder interrupt, es wird nicht aus dem Dateideskriptor in Ihrem Satz entstehen.

enthält "errno.h"

%Vor%     
Hong Zhou 31.10.2012 08:41
quelle

Tags und Links