Provided by:
manpages-de-dev_0.5-4.1ubuntu1_all 
BEZEICHNUNG
accept - nimmt eine Verbindung auf einem Socket an
BEZEICHNUNG
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, int *addrlen);
BESCHREIBUNG
Der Parameter s ist ein Socket, der mit socket(2), erzeugt wurde, mit
bind(2) an eine Adresse gebunden wird und mit listen(2) auf
Verbindungen wartet. Die Funktion accept extrahiert den ersten
Verbindungswunsch aus der Warteschlange der ankommenden Verbindungen,
erzeugt einen neuen Socket mit den gleichen Eigenschaften von s und
alloziiert einen neue Deskriptor für den Socket. Wenn keine wartende
Verbindung vorhanden ist und der Socket nicht als nicht-blockierend
markiert ist, blockiert accept den aufrufenden Prozess bis eine
Verbindung vorhanden ist. Wenn der Socket als nicht-blockierend
markiert ist und keine wartenden Verbindungen vorhanden sind, gibt
accept eine Fehlermeldung, wie sie unten beschrieben ist, zurück. Der
akzeptierte Socket kann nicht mehr für weitere Verbindungen benutzt
werden. Der Originalsocket s bleibt offen.
Das Argument addr ist ein Rückgabeparameter, das mit der Adresse der
verbindenden Einheit gefüllt wird, wie sei der Kommunikationsschicht
bekannt ist. Das exakte Format des addr Parameters wird von der Domain
festgelegt, in der die Kommunikation stattfindet. Die Variable addrlen
ist ein Rückgabeparameter, sie sollte anfangs die Anzahl Bytes
enthalten auf die addr zeigt; bei der Rückgabe enthält es die aktuelle
Länge der Adresse (in Bytes). Dieser Aufruf wird bei
verbindungsbasierten Sockettypen benutzt, momentan in Verbindung mit
SOCK_STREAM.
Es ist möglich, einen Socket mit select(2) aufzumachen, um ihn mit
einem accept zum Lesen zu benutzen.
Bei bestimmten Protokollen, die explizite Bestätigung verlangen, wie
ISO oder DATAKIT, kann davon ausgegangen werden, dass accept nur die
nächste Verbindung aus der Warteschlange holt ohne sie automatisch zu
bestätigen. Die Bestätigung kann ein normaler Lese- oder
Schreibvorgang auf dem neuen Deskriptor mit sich bringen, eine Ablehung
kann impliziert werden durch ein Schließen des neuen Sockets.
Man kann die Daten einer Verbindungsanforderung ohne Bestätigung
erhalten, indem man einen recvmsg(2) Aufruf absetzt mit einer auf null
gesetzten msg_iovlen un einem msg_controllen ungleich null oder durch
Aufruf von getsockopt(2). Analog dazu kann man die Ablehnung einer
Benutzerverbindung erzeugen, indem man sendmsg(2) nur mit den
Kontrollinformationen aufruft oder durch setsockopt(2).
RÜCKGABEWERTE
Die Funktion gibt bei Fehlern -1 zurück. Wenn der Aufruf erfolgreich
war, gibt sie einen positiven Integerwert zurück, der der Deskriptor
für den aktzeptierten Socket ist.
FEHLER
EBADF Der Deskriptor ist ungültig.
ENOTSOCK
Der Deskriptor referenziert eine Datei und keinen Socket.
EOPNOTSUPP
Der referenzierte Socket ist nicht vom Typ SOCK_STREAM.
EFAULT Der Parameter addr ist kein beschreibbarer Teil des Adressraums
des Prozesses.
EWOULDBLOCK
Der Socket ist als nicht-blockierend markiert, aber es sind
keine zu akzeptierenden Verbindungen vorhanden.
GESCHICHTE
Die Funktion accept erschien in BSD 4.2.
SIEHE AUCH
bind(2), connect(2), listen(2), select(2), socket(2).