.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1983, 1990, 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" Modified 1993-07-24 by Rik Faith .\" Modified 1996-10-21 by Eric S. Raymond .\" Modified 1998-2000 by Andi Kleen to match Linux 2.2 reality .\" Modified 2002-04-23 by Roger Luethi .\" Modified 2004-06-17 by Michael Kerrisk .\" 2008-12-04, mtk, Add documentation of accept4() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH accept 2 "2. Mai 2024" "Linux man\-pages 6.8" .SH BEZEICHNUNG accept, accept4 \- nimmt eine Verbindung auf einem Socket an .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .P \fBint accept(int \fP\fIsockdd\fP\fB, struct sockaddr *_Nullable restrict \fP\fIadresse\fP\fB,\fP \fB socklen_t *_Nullable restrict \fP\fIadresslaenge\fP\fB);\fP .P \fB#define _GNU_SOURCE\fP /* siehe feature_test_macros(7) */ \fB#include \fP .P \fBint accept4(int \fP\fIsockdd\fP\fB, struct sockaddr *_Nullable restrict \fP\fIadresse\fP\fB,\fP \fB socklen_t *_Nullable restrict \fP\fIadresslaenge\fP\fB, int \fP\fIschalter\fP\fB);\fP .fi .SH BESCHREIBUNG Der Systemaufruf \fBaccept\fP() wird mit den verbindungsbasierten Sockettypen (\fBSOCK_STREAM\fP und \fBSOCK_SEQPACKET\fP) benutzt. Er extrahiert die erste Verbindungsanfrage in der Warteschlange ausstehender Verbindungen für das wartende Socket \fIsockdd\fP, 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 \fIsockdd\fP wird von diesem Aufruf nicht beeinflusst. .P Das Argument \fIsockdd\fP ist ein Socket, das mit \fBsocket\fP(2) erstellt wurde, mit \fBbind\fP(2) an eine lokale Adresse gebunden ist und nach einem \fBlisten\fP(2) auf Verbindungen wartet. .P Das Argument \fIadresse\fP ist ein Zeiger auf eine \fIsockaddr\fP\-Struktur. Diese Struktur enthält die Adresse des Peer\-Sockets, wie sie der Kommunikationsschicht bekannt ist. Das exakte Format der zurückgegebenen Adresse \fIadresse\fP wird durch die Adressfamilie des Sockets festgelegt (siehe \fBsocket\fP(2) und die jeweiligen Protokoll\-Handbuchseiten). Wenn \fIadresse\fP NULL ist, wird nichts eingrtragen; in diesem Fall wird \fIadresslaenge\fP nicht benutzt und sollte auch NULL sein. .P Das Argument \fIadresslaenge\fP ist ein Wert\-Ergebnis\-Argument: Der Aufrufende muss es initialisieren, um die Größe (in Byte) der Struktur zu erhalten, auf die \fIadresse\fP zeigt; bei der Rückkehr wird es die tatsächliche Größe der Peer\-Adresse enthalten. .P Die zurückgegebene Adresse wird gekürzt, falls der bereitgestellte Puffer zu klein ist. In diesem Fall gibt \fIadresslaenge\fP einen Wert zurück, der größer als der übergebene Wert ist. .P Falls keine ausstehenden Verbindungen in der Warteschlange sind und das Socket nicht als »nonblocking« gekennzeichnet ist, blockt \fBaccept\fP() den Aufrufenden bis eine Verbindung besteht. Wenn das Socket als »nonblocking« gekennzeichnet ist und in der Warteschlange keine ausstehenden Verbindungen enthält, schlägt \fBaccept\fP() mit dem Fehler \fBEAGAIN\fP oder \fBEWOULDBLOCK\fP fehl. .P Zur Information über neu auf dem Socket eintreffende Verbindungen, kann \fBselect\fP(2), \fBpoll\fP(2) oder \fBepoll\fP(7) benutzt werden. Wenn versucht wird, eine neue Verbindung zu erstellen, wird ein lesbares Ereignis geliefert und sie können \fBaccept\fP() aufrufen, um ein Socket für diese Verbindung zu erhalten. Alternativ können Sie das Socket zum Setzen von \fBSIGIO\fP veranlassen, wenn es auf dem Socket zu Aktivität kommt; lesen Sie \fBsocket\fP(7), um Einzelheiten zu erhalten. .P Falls \fIschalter\fP 0 ist, dann entspricht \fBaccept4\fP() \fBaccept\fP(). Die folgenden Werte können in \fIschalter\fP bitweise ODER\-verknüpft werden, um ein unterschiedliches Verhalten zu bewirken: .TP 16 \fBSOCK_NONBLOCK\fP Setzt den Dateistatus\-Schalter \fBO_NONBLOCK\fP für die geöffnete Datei\-Deskription (siehe \fBopen\fP(2)), auf die sich der neue Dateideskriptor bezieht. Die Verwendung dieses Schalters spart zusätzliche Aufrufe von \fBfcntl\fP(2), um das gleiche Ergebnis zu erreichen. .TP \fBSOCK_CLOEXEC\fP Setzt den Schalter »Schließen bei Ausführung« (close\-on\-exec, \fBFD_CLOEXEC\fP) für den neuen Dateideskriptor. Lesen Sie die Beschreibung des Schalters \fBO_CLOEXEC\fP in \fBopen\fP(2), um die Gründe zu beleuchten, warum dies nützlich sein könnte. .SH RÜCKGABEWERT Bei Erfolg geben diese Systemaufrufe einen Dateideskriptor für das akzeptierte Socket (eine nicht negative Ganzzahl) zurück. Bei einem Fehler wird \-1 zurückgegeben, \fIerrno\fP gesetzt, um den Fehler anzuzeigen, und \fIadresslaenge\fP verbleibt unverändert. .SS Fehlerbehandlung Die Linux\-Version von \fBaccept\fP() (und \fBaccept4\fP()) reichen alle noch nicht behandelten Netzwerkfehler an das neue Socket als einen Fehlerkode von \fBaccept\fP() 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 \fBaccept\fP() definierten Netzwerkfehler aufspüren und sie wie \fBEAGAIN\fP durch erneutes Probieren verfolgen. Im dem Fall von TCP/IP sind dies \fBENETDOWN\fP, \fBEPROTO\fP, \fBENOPROTOOPT\fP, \fBEHOSTDOWN\fP, \fBENONET\fP, \fBEHOSTUNREACH\fP, \fBEOPNOTSUPP\fP und \fBENETUNREACH\fP. .SH FEHLER .TP \fBEAGAIN\fP oder \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux Das Socket ist als »nonblocking« gekennzeichnet und es sind keine Verbindungen vorhanden, die akzeptiert werden müssen. POSIX.1\-2001 und POSIX.1\-2008 erlauben in diesem Fall auch die Rückgabe beider Fehler und verlangen nicht, dass diese Konstanten den gleichen Wert haben. Deshalb sollte eine portable Anwendung beide Möglichkeiten prüfen. .TP \fBEBADF\fP \fIsockdd\fP ist kein Deskriptor für eine geöffnete Datei. .TP \fBECONNABORTED\fP Eine Verbindung wurde abgebrochen. .TP \fBEFAULT\fP Das Argument \fIadresse\fP ist kein beschreibbarer Teil des Adressraums des Benutzers. .TP \fBEINTR\fP Der Systemaufruf wurde vor dem Eintreffen einer gültigen Verbindung durch ein Signal unterbrochen; lesen Sie \fBsignal\fP(7). .TP \fBEINVAL\fP Das Socket wartet nicht auf Verbindungen oder \fIadresslaenge\fP ist ungültig (z.B. negativ). .TP \fBEINVAL\fP (\fBaccept4\fP()) ungültiger Wert in \fIschalter\fP .TP \fBEMFILE\fP Die Beschränkung pro Prozess der Anzahl offener Datei\-Deskriptoren wurde erreicht. .TP \fBENFILE\fP Die systemweite Beschränkung für die Gesamtzahl offener Dateien wurde erreicht. .TP \fBENOBUFS\fP .TQ \fBENOMEM\fP Nicht genug Speicher. Dies bedeutet oft, dass die Speicherreservierung durch die Socket\-Pufferbeschränkungen begrenzt ist und nicht durch den Systemspeicher. .TP \fBENOTSOCK\fP Der Dateideskriptor \fIsockdd\fP zeigt nicht auf ein Socket. .TP \fBEOPNOTSUPP\fP Das referenzierte Socket ist nicht vom Typ \fBSOCK_STREAM\fP. .TP \fBEPERM\fP Firewallregeln die Verbindung verbieten .TP \fBEPROTO\fP Protokollfehler .P Zusätzlich könnten Netzwerkfehler für das neue Socket und wie sie für das Protokoll definiert sind, zurückgegeben werden. Verschiedene Linux\-Kernel können andere Fehler zurückgeben, wie \fBENOSR\fP, \fBESOCKTNOSUPPORT\fP, \fBEPROTONOSUPPORT\fP oder \fBETIMEDOUT\fP. Der Wert \fBERESTARTSYS\fP kann bei einer Ablaufverfolgung auftreten. .SH VERSIONEN .\" Some testing seems to show that Tru64 5.1 and HP-UX 11 also .\" do not inherit file status flags -- MTK Jun 05 Auf Linux erbt das neue, von \fBaccept\fP() zurückgegebene Socket \fInicht\fP die Datei\-Statusschalter wie \fBO_NONBLOCK\fP und \fBO_ASYNC\fP vom wartenden Socket. Dieses Verhalten unterscheidet sich von der vorschriftsmäßigen BSD\-Socket\-Implementierung. Portable Programme sollten sich nicht auf Vererbung oder Nicht\-Vererbung der Datei\-Statusschalter verlassen und immer explizit alle benötigten Schalter des Sockets setzen, das sie von \fBaccept\fP() zurückbekommen. .SH STANDARDS .TP \fBaccept\fP() POSIX.1\-2008. .TP \fBaccept4\fP() Linux. .SH GESCHICHTE .TP \fBaccept\fP() .\" The BSD man page documents five possible error returns .\" (EBADF, ENOTSOCK, EOPNOTSUPP, EWOULDBLOCK, EFAULT). .\" POSIX.1-2001 documents errors .\" EAGAIN, EBADF, ECONNABORTED, EINTR, EINVAL, EMFILE, .\" ENFILE, ENOBUFS, ENOMEM, ENOTSOCK, EOPNOTSUPP, EPROTO, EWOULDBLOCK. .\" In addition, SUSv2 documents EFAULT and ENOSR. POSIX.1\-2001, SVr4, 4.4BSD (\fBaccept\fP() erschien zuerst in 4.2BSD). .TP \fBaccept4\fP() Linux 2.6.28, Glibc 2.10. .SH ANMERKUNGEN Es könnte sein, dass nicht immer eine Verbindung wartet, nachdem ein \fBSIGIO\fP zugestellt wurde oder \fBselect\fP(2), \fBpoll\fP(2) oder \fBepoll\fP(7) ein Lesbarkeitsereignis zurückgeben, weil die Verbindung von einem asynchronen Netwerkfehler oder einem anderen Thread entfernt worden sein könnte bevor \fBaccept\fP() aufgerufen wurde. Falls dies geschieht, wird der Aufruf das Warten auf die Ankunft der nächsten Verbindung blockieren. Um sicherzustellen, dass \fBaccept\fP() niemals blockiert, muss beim durchgereichten Socket \fIsockdd\fP der Schalter \fBO_NONBLOCK\fP gesetzt werden (siehe \fBsocket\fP(7)). .P .\" Bei bestimmten Protokollen, die eine explizite Bestätigung verlangen, wie DECnet, kann davon ausgegangen werden, dass \fBaccept\fP() 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 Ablehnung kann durch ein Schließen des neuen Sockets impliziert werden. Derzeit verfügt nur DECnet auf Linux über diese Semantik. .SS "Der Typ socklen_t" .\" such as Linux libc4 and libc5, SunOS 4, SGI .\" SunOS 5 has 'size_t *' In der ursprünglichen BSD\-Socket\-Implementierung (und in anderen älteren Systemen) war das dritte Argument von \fBaccept\fP() als \fIint\ *\fP deklariert. Ein Entwurf des Standards POSIX.1g wollte es auf \fIsize_t\ *\fPC ändern, spätere POSIX\-Standards und Glibc 2.x haben \fIsocklen_t\ * \fP. .SH BEISPIELE Siehe \fBbind\fP(2). .SH "SIEHE AUCH" \fBbind\fP(2), \fBconnect\fP(2), \fBlisten\fP(2), \fBselect\fP(2), \fBsocket\fP(2), \fBsocket\fP(7) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Hanno Wagner und Chris Leick erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .