other languages
other sections
ACCEPT(2) | Linux-Programmierhandbuch | ACCEPT(2) |
BEZEICHNUNG¶
accept – nimmt eine Verbindung auf einem Socket anÜBERSICHT¶
#include <sys/types.h> /* Siehe ANMERKUNGEN */ #include <sys/socket.h> int accept(int sockfd, struct sockaddr *adresse, socklen_t *adresslaenge); #define _GNU_SOURCE /* Siehe feature_test_macros(7) */ #include <sys/socket.h> int accept4(int sockfd, struct sockaddr *adresse, socklen_t *adresslaenge, int schalter);
BESCHREIBUNG¶
Der Systemaufruf accept() wird mit den verbindungsbasierten Sockettypen ( SOCK_STREAM und SOCK_SEQPACKET) benutzt. Er extrahiert die erste Verbindungsanfrage in der Warteschlange ausstehender Verbindungen für das wartende Socket sockfd, erzeugt eine neues verbundenes Socket und gibt einen neuen Datei-Deskriptor zurück, der sich auf dieses Socket bezieht. Das neu erstellte Socket ist nicht im Wartezustand. Das Original-Socket sockfd wird von diesem Aufruf nicht beeinflusst. Das Argument sockfd ist ein Socket, das mit socket(2) erstellt wurde, mit bind(2) an eine lokale Adresse gebunden ist und nach einem listen(2) auf Verbindungen wartet.- SOCK_NONBLOCK
- Setzt den Datei-Statusschalter O_NONBLOCK für den neu geöffneten Dateideskriptor. Die Benutzung dieses Schalters speichert zusätzliche Aufrufe nach fcntl(2), um das gleiche Ergebnis zu erzielen.
- SOCK_CLOEXEC
- Setzt den Schalter Schließen-beim-Ausführen FD_CLOEXEC für den neu geöffneten Datei-Deskriptor. Lesen Sie die Beschreibung des Schalters O_CLOEXEC in open(2), um die Gründe zu beleuchten, warum dies nützlich sein könnte.
RÜCKGABEWERT¶
Bei Erfolg geben diese Systemaufrufe eine nicht negative Ganzzahl zurück, die kein Deskriptor für das akzeptierte Socket ist. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend gesetzt.Fehlerbehandlung¶
Die Linux-Version von accept() (und accept4()) reichen alle noch nicht behandelten Netzwerkfehler an das neue Socket als einen Fehlerkode von accept() weiter. Dieses Verhalten unterscheidet sich von anderen Implementierungen des BSD-Sockets. Um zuverlässig operieren zu können, sollte die Anwendung die für das Protokoll nach accept() definierten Netzwerkfehler aufspüren und sie wie EAGAIN durch erneutes Probieren verfolgen. Im dem Fall von TCP/IP sind dies ENETDOWN, EPROTO, ENOPROTOOPT, EHOSTDOWN, ENONET, EHOSTUNREACH, EOPNOTSUPP und ENETUNREACH.FEHLER¶
- EAGAIN oder EWOULDBLOCK
- Das Socket ist als »nonblocking« gekennzeichnet und es sind keine Verbindungen vorhanden, die akzeptiert werden müssen. POSIX.1-2001 erlaubt in diesem Fall auch die Rückgabe beider Fehlers und verlangt nicht, dass diese Konstanten den gleichen Wert haben. Deshalb sollte eine portable Anwendung beide Möglichkeiten prüfen.
- EBADF
- Der Deskriptor ist ungültig.
- ECONNABORTED
- Eine Verbindung wurde abgebrochen.
- EFAULT
- Das Argument adresse ist kein beschreibbarer Teil des Adressraums des Benutzers.
- EINTR
- Der Systemaufruf wurde vor dem Eintreffen einer gültigen Verbindung durch ein Signal unterbrochen; lesen Sie signal(7).
- EINVAL
- Das Socket wartet nicht auf Verbindungen oder adresslaenge ist ungültig (z.B. negativ).
- EINVAL
- (accept4()) ungültiger Wert in schalter
- EMFILE
- Die Beschränkung offener Datei-Deskriptoren pro Prozess wurde erreicht.
- ENFILE
- Die Systembeschränkung für die Summe offener Datei wurde erreicht.
- ENOBUFS, ENOMEM
- Nicht genug Speicher. Dies bedeutet oft, dass die Speicherreservierung durch die Socket-Pufferbeschränkungen begrenzt ist und nicht durch den Systemspeicher.
- ENOTSOCK
- Der Deskriptor referenziert eine Datei und kein Socket.
- EOPNOTSUPP
- Das referenzierte Socket ist nicht vom Typ SOCK_STREAM.
- EPROTO
- Protokollfehler
- EPERM
- Firewallregeln die Verbindung verbieten
VERSIONEN¶
Der Systemaufruf accept4() ist seit Linux 2.6.28 verfügbar; Unterstützung in Glibc ist seit Version 2.10 verfügbar.KONFORM ZU¶
accept(): POSIX.1-2001, SVr4, 4.4BSD, (accept() erstmalig erschienen in 4.2BSD).ANMERKUNGEN¶
POSIX.1-2001 erfordert nicht, dass <sys/types.h> eingebunden wird. Diese Header-Datei ist in Linux nicht erforderlich. Allerdings benötigen einige historische Implementierungen (BSD) diese Header-Datei. Es wird empfohlen, sie für portierbare Anwendungen einzubinden.Der Typ socklen_t¶
Das dritte Argument von accept() wurde ursprünglich als ein int * deklariert (und ist dies unter Libc4, Libc5 und vielen anderen Systemen, wie 4.x BSD, SunOS 4, SGI); ein Entwurf des POSIX.1g-Standards wollte es in ein size_t * ändern und das ist es in SunOS 5. Neuere POSIX-Entwürfe benutzen socklen_t * und daher die »Single UNIX Specification« und Glibc2. Zitat Linus Thorvalds:BEISPIEL¶
Siehe bind(2).SIEHE AUCH¶
bind(2), connect(2), listen(2), select(2), socket(2), socket(7)KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux- man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man-pages/.ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Hanno Wagner <wagner@bidnix.bid.fh-hannover.de> und Chris Leick <c.leick@vollbio.de> erstellt.10. September 2010 | Linux |