#include <sys.socket.h>
#include <sys.poll.h>
Kernighan-Ritchie-C:
int soc_poll(fds, nfds, timeout);
struct pollfd fds[];
unsigned long nfds;
int timeout;
ANSI-C:
int soc_poll(struct pollfd fds[], unsigned long nfds, int timeout);
Beschreibung
Die Funktion soc_poll() überprüft eine Menge von Socket-Deskriptoren, die mit einem Array von Struktur-Elementen vom Typ pollfd übergeben werden. Abhängig vom gewünschten Test wird in jedem deskriptorspezifischen Struktur-Element vermerkt, ob auf diesem Socket-Deskriptor Nachrichten empfangen oder gesendet werden können, oder ob besondere Ereignisse aufgetreten sind.
Die Funktion soc_poll() wird in den Adressfamilien AF_INET, AF_INET6 und AF_ISO unterstützt.
Der Parameter fds ist ein Zeiger auf das vom Aufrufer zu übergebende Array mit je einem Element vom Typ struct pollfd für jeden zu testenden Socket-Deskriptor.
Der Parameter nfds gibt die Menge der zu testenden Deskriptoren an.
Der Parameter timeout spezifiziert die maximale Wartezeit in Sekunden, die der Funktion soc_poll() für die Prüfung der Deskriptoren zur Verfügung steht, falls kein Ereignis eingetreten ist:
Wert von timeout = 0: Keine Wartezeit, es werden lediglich alle markierten File-Deskriptoren geprüft.
Wert von timeout = -1: soc_poll() blockiert, bis ein Ereignis an mindestens einem der ausgewählten File-Deskriptoren eintritt.
Die maximale Zeitspanne, die akzeptiert wird, beträgt ~ 24,85 Tage. Bei einem größeren Wert wird solange gewartet, bis ein Ereignis eintritt.
Struktur pollfd
Die Struktur pollfd ist in <sys.poll.h> wie folgt deklariert:
struct pollfd { int fd; /* socket file descriptor to poll*/ short events; /* events on interest on fd*/ short revents; /* events that occured on fd */ };
Der Socket-Deskriptor fd kennzeichnet den zu prüfenden Socket.
events kennzeichnet die zu prüfenden Ereignisse auf diesem Socket.
revents liefert das Prüfergebnis zurück. Die Bits POLLNVAL, POLLERR, POLLHUP werden in revents immer gesetzt, wenn die Bedingung dafür erfüllt ist, unabhängig von den in events gesetzten Bits.
Die Ereignisabfrage im Elementfeld events ist mit den folgenden Bitmasken möglich:
POLLIN
POLLOUT
Folgende Bitmasken werden weder im Elementfeld events unterstützt, noch im Elementfeld revents gesetzt:
POLLPRI
POLLRDNORM
POLLWRNORM
POLLRDBAND
POLLWRBAND
Folgende Ereignisanzeigen in der Bitmaske des Elementfeldes revents sind möglich:
POLLIN
Daten können bei einer bestehenden Verbindung nicht-blockierend gelesen werden.
POLLOUT
Daten können bei einer bestehenden Verbindung nicht-blockierend geschrieben werden.
POLLNVAL
Der mit dem Socket-Deskriptor ausgewählte Socket ist nicht verfügbar oder besitzt nicht den Status, der eine aktive Verbindung anzeigt. Dieses Flag wird nur als Ergebnis in das Feld revents geschrieben.
POLLERR
Dem ausgewählten Socket wurde ein Fehler gemeldet und die Verbindung ist inaktiv. Dieses Flag wird nur als Ergebnis in das Feld revents geschrieben.
POLLHUP
Die Anwendung oder dasTransportsystem haben die Verbindung geschlossen. Dieses Flag wird nur als Ergebnis in das Feld revents geschrieben.
Wenn für einen Socket-Deskriptor fd ein negativer Wert angegeben wird, wird dieser Wert ignoriert und das revents Feld auf 0 gesetzt.
Returnwert
0:
Die im Parameter timeout angegebene Zeit ist abgelaufen, ohne dass eine Ereignisanzeige gesetzt wurde.
>0
Der positive Wert zeigt die Anzahl der Socket-Deskriptoren an, für die mindestens eine Ereignisanzeige im revents-Feld gesetzt wurde.
-1
bei Fehler. errno wird gesetzt, um Fehler anzuzeigen.
Fehler
EACCES
Die Sockets-Funktion wird vom aufgerufenen Subsystem nicht unterstützt.
EINTR
Der soc_poll()-Aufruf wurde von soc_wake() unterbrochen.
EINVAL
Der Wert von nfds ist größer, als die maximal zugelassene Anzahl von Socket-Deskriptoren. Den maximalen Wert ermitteln Sie durch Aufruf von getdtablesize().
Siehe auch
select()