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)