tail head cat sleep
QR code linking to this page

Manpage  — ACCEPT

BEZEICHNUNG

accept - nimmt eine Verbindung auf einem Socket an

INHALT

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) [Englisch] Aufruf absetzt mit einer auf null gesetzten msg_iovlen un einem msg_controllen ungleich null oder durch Aufruf von getsockopt(2) [Englisch]. Analog dazu kann man die Ablehnung einer Benutzerverbindung erzeugen, indem man sendmsg(2) [Englisch] nur mit den Kontrollinformationen aufruft oder durch setsockopt(2) [Englisch].

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).


8. Mai 1996 ACCEPT (2) BSD

tail head cat sleep
QR code linking to this page


Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.

I think Unix and snowflakes are the only two classes of objects in the universe in which no two instances ever match exactly.
— Noel Chiappa