select

Deklaration

#include <sys/select.h>

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);

Beschreibung

Die Funktion select() erlaubt die gleichzeitige Überwachung mehrerer Sockets mit nur einem Prozess/Thread. Die zu überwachenden Sockets (oder Dateideskriptoren, Pipes, FIFOs, etc.) werden in ein Set eingefügt und je nach zu überwachenden Eigenschaften als readfds (Lesbarkeit), writefds (Beschreibbarkeit) oder exceptfds (Eintritt von Ausnahmebedingungen) übergeben. Weiterhin kann ein Timeout festgelegt werden, nach dem die Funktion auch dann zurückkehrt, wenn keine der Ereignisse eingetreten ist. Nach Rückkehr der Funktion sind in den Sets jene Socket enthalten, für die die jeweiligen Ereignisse eingetreten sind. Der POSIX-Standard lässt offen, ob der Wert in timeout nach der Rückkehr unverändert ist, oder die verbliebene Restzeit anzeigt. Eigene Programme sollten darauf vorbereitet sein.

Zur Manipulation der Sets stehen die Makros FD_CLR (entfernen eines Sockets aus dem Set), FD_ISSET (prüfen ob ein Socket im Set enthalten ist), FD_SET (hinzufügen eines Sockets in das Set) und FD_ZERO (leeren des Sets) zur Verfügung. Es sollten ausschließlich diese Makros zur Manipulation genutzt werden und keine Annahmen über die interne Repräsentation der Daten getroffen werden.

Parameter

nfds Socket mit dem höchsten Zahlenwert +1.
readfds Set von Sockets die auf Lesbarkeit überwacht werden sollen. Darf NULL sein.
writefds Set von Sockets die auf Beschreibbarkeit überwacht werden sollen. Darf NULL sein.
exceptfds Set von Sockets die auf Ausnahmebedingungen überwacht werden sollen. Darf NULL sein.
timeout Timeout nach dem die Funktion spätestens zurückkehren soll. Wird hier NULL übergeben, wartet die Funktion "unendlich" lang. Wird eine gültige Struktur übergeben, deren Elemente tv_sec und tv_usec jeweils 0 sind, kehrt die Funktion sofort zurück.

Rückgabewert

Die Summe der in allen Sets enthaltenen Sockets oder -1 im Fehlerfall. Wenn der Timeout vorzeitig abgelaufen ist wird 0 zurückgegeben.

Typische Fehler


Zurück