accept

ACCEPT(2)                        Systemaufrufe                       ACCEPT(2)



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 Prozeà 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, daà 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).

RUECKGABEWERTE
       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 AdreÃraums
              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).




BSD                               8. Mai 1996                        ACCEPT(2)