plucky (2) accept.2.gz

Provided by: manpages-de-dev_4.25.1-1_all bug

BEZEICHNUNG

       accept, accept4 - nimmt eine Verbindung auf einem Socket an

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <sys/socket.h>

       int accept(int sockdd, struct sockaddr *_Nullable restrict adresse,
                  socklen_t *_Nullable restrict adresslaenge);

       #define _GNU_SOURCE             /* siehe feature_test_macros(7) */
       #include <sys/socket.h>

       int accept4(int sockdd, struct sockaddr *_Nullable restrict adresse,
                  socklen_t *_Nullable restrict 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 sockdd, 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 sockdd wird von diesem Aufruf nicht beeinflusst.

       Das  Argument sockdd 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.

       Das Argument adresse ist ein Zeiger auf eine sockaddr-Struktur. Diese Struktur enthält  die  Adresse  des
       Peer-Sockets,  wie  sie  der  Kommunikationsschicht  bekannt  ist.  Das exakte Format der zurückgegebenen
       Adresse adresse wird durch die Adressfamilie des Sockets festgelegt (siehe socket(2) und  die  jeweiligen
       Protokoll-Handbuchseiten).  Wenn  adresse  NULL  ist,  wird  nichts  eingrtragen;  in  diesem  Fall  wird
       adresslaenge nicht benutzt und sollte auch NULL sein.

       Das Argument adresslaenge ist ein Wert-Ergebnis-Argument: Der Aufrufende muss es initialisieren,  um  die
       Größe  (in  Byte)  der  Struktur  zu  erhalten,  auf  die  adresse  zeigt;  bei  der Rückkehr wird es die
       tatsächliche Größe der Peer-Adresse enthalten.

       Die zurückgegebene Adresse wird gekürzt, falls der bereitgestellte Puffer zu klein ist.  In  diesem  Fall
       gibt adresslaenge einen Wert zurück, der größer als der übergebene Wert ist.

       Falls  keine  ausstehenden  Verbindungen in der Warteschlange sind und das Socket nicht als »nonblocking«
       gekennzeichnet ist, blockt accept() den Aufrufenden bis eine Verbindung  besteht.  Wenn  das  Socket  als
       »nonblocking«  gekennzeichnet  ist  und  in  der  Warteschlange  keine ausstehenden Verbindungen enthält,
       schlägt accept() mit dem Fehler EAGAIN oder EWOULDBLOCK fehl.

       Zur Information über neu auf dem Socket eintreffende Verbindungen, kann select(2), poll(2) oder  epoll(7)
       benutzt  werden.  Wenn  versucht  wird,  eine  neue  Verbindung  zu erstellen, wird ein lesbares Ereignis
       geliefert und sie können accept() aufrufen, um ein Socket für diese Verbindung  zu  erhalten.  Alternativ
       können  Sie das Socket zum Setzen von SIGIO veranlassen, wenn es auf dem Socket zu Aktivität kommt; lesen
       Sie socket(7), um Einzelheiten zu erhalten.

       Falls schalter 0 ist, dann entspricht accept4() accept(). Die folgenden Werte können in schalter bitweise
       ODER-verknüpft werden, um ein unterschiedliches Verhalten zu bewirken:

       SOCK_NONBLOCK   Setzt  den  Dateistatus-Schalter  O_NONBLOCK  für  die geöffnete Datei-Deskription (siehe
                       open(2)), auf die sich der neue Dateideskriptor bezieht. Die Verwendung dieses  Schalters
                       spart zusätzliche Aufrufe von fcntl(2), um das gleiche Ergebnis zu erreichen.

       SOCK_CLOEXEC    Setzt  den  Schalter »Schließen bei Ausführung« (close-on-exec, FD_CLOEXEC) für den neuen
                       Dateideskriptor. 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  einen  Dateideskriptor  für  das akzeptierte Socket (eine nicht
       negative Ganzzahl) zurück. Bei  einem  Fehler  wird  -1  zurückgegeben,  errno  gesetzt,  um  den  Fehler
       anzuzeigen, und adresslaenge verbleibt unverändert.

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

       EBADF  sockdd ist kein Deskriptor für eine geöffnete Datei.

       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 pro Prozess der Anzahl offener Datei-Deskriptoren wurde erreicht.

       ENFILE Die systemweite Beschränkung für die Gesamtzahl offener Dateien 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 Dateideskriptor sockdd zeigt nicht auf ein Socket.

       EOPNOTSUPP
              Das referenzierte Socket ist nicht vom Typ SOCK_STREAM.

       EPERM  Firewallregeln die Verbindung verbieten

       EPROTO Protokollfehler

       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   ENOSR,
       ESOCKTNOSUPPORT,  EPROTONOSUPPORT  oder  ETIMEDOUT.  Der Wert ERESTARTSYS kann bei einer Ablaufverfolgung
       auftreten.

VERSIONEN

       Auf Linux erbt das neue, von accept() zurückgegebene Socket nicht die Datei-Statusschalter wie O_NONBLOCK
       und  O_ASYNC  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 accept() zurückbekommen.

STANDARDS

       accept()
              POSIX.1-2008.

       accept4()
              Linux.

GESCHICHTE

       accept()
              POSIX.1-2001, SVr4, 4.4BSD (accept() erschien zuerst in 4.2BSD).

       accept4()
              Linux 2.6.28, Glibc 2.10.

ANMERKUNGEN

       Es könnte sein, dass nicht immer  eine  Verbindung  wartet,  nachdem  ein  SIGIO  zugestellt  wurde  oder
       select(2),  poll(2)  oder  epoll(7)  ein  Lesbarkeitsereignis  zurückgeben, weil die Verbindung von einem
       asynchronen Netwerkfehler oder einem anderen Thread entfernt worden sein könnte bevor accept() aufgerufen
       wurde.  Falls  dies  geschieht,  wird  der  Aufruf  das  Warten  auf  die Ankunft der nächsten Verbindung
       blockieren. Um sicherzustellen, dass accept() niemals blockiert, muss beim durchgereichten Socket  sockdd
       der Schalter O_NONBLOCK gesetzt werden (siehe socket(7)).

       Bei  bestimmten Protokollen, die eine explizite Bestätigung verlangen, wie DECnet, kann davon ausgegangen
       werden, dass 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 Ablehnung kann durch ein Schließen des neuen Sockets impliziert werden. Derzeit verfügt nur
       DECnet auf Linux über diese Semantik.

   Der Typ socklen_t
       In  der  ursprünglichen  BSD-Socket-Implementierung  (und  in  anderen  älteren  Systemen) war das dritte
       Argument von accept() als int * deklariert. Ein Entwurf des Standards POSIX.1g wollte  es  auf  size_t *C
       ändern, spätere POSIX-Standards und Glibc 2.x haben socklen_t * .

BEISPIELE

       Siehe bind(2).

SIEHE AUCH

       bind(2), connect(2), listen(2), select(2), socket(2), socket(7)

ÜBERSETZUNG

       Die  deutsche  Übersetzung dieser Handbuchseite wurde von Hanno Wagner <wagner@bidnix.bid.fh-hannover.de>
       und Chris Leick <c.leick@vollbio.de> erstellt.

       Diese Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die  GNU  General  Public  License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE
       HAFTUNG übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte  eine  E-Mail  an  die
       Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.