Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       socket - einen Kommunikationsendpunkt erzeugen

ÜBERSICHT

       #include <sys/types.h> /* Siehe ANMERKUNGEN */
       #include <sys/socket.h>

       int socket(int domain, int type, int protocol);

BESCHREIBUNG

       socket()  erzeugt einen Kommunikationsendpunkt und gibt einen Dateideskriptor zurück, der diesen Endpunkt
       referenziert. Der von einem erfolgreichen Aufruf zurückgelieferte Dateideskriptor wird der Dateidesriptor
       mit der niedrigsten Nummer sein, die noch nicht für den Prozess offen ist.

       Der Parameter domain spezifiziert eine Kommunikations-Domain; dies wählt die  Protokollfamilie  aus,  die
       benutzt  werden  soll.  Diese  Familien  sind  in  <sys/socket.h>  definiert. Zu den derzeit verstandenen
       Formaten gehören:
       Name                Zweck                                Handbuchseite
       AF_UNIX, AF_LOCAL   Lokale Kommunikation                 unix(7)
       AF_INET             IPv4-Internet-Protokolle             ip(7)
       AF_INET6            IPv6-Internet-Protokolle             ipv6(7)
       AF_IPX              IPX-Novell-Protokolle
       AF_NETLINK          Kernel-Benutzerschnittstellengerät   netlink(7)
       AF_X25              ITU-T-X.25- / ISO-8208-Protokoll     x25(7)
       AF_AX25             Amateurfunk-Protokoll AX.25
       AF_ATMPVC           Zugriff auf unbearbeitete ATM PVCs
       AF_APPLETALK        AppleTalk                            ddp(7)
       AF_PACKET           Systemnahe Paketschnittstelle        packet(7)
       AF_ALG              Schnittstelle                  zur
                           Kernel-Crypto-API

       Der  Socket  hat  den  in type angegebenen Typ, welcher die Kommunikationssemantik festlegt. Derzeit sind
       folgende Typen definiert:

       SOCK_STREAM     Stellt sequentielle, zuverlässige, verbindungsorientierte Zweiweg-Bytestreams bereit. Ein
                       »Out-of-Band«-Datenübertragungsmechanismus kann unterstützt werden.

       SOCK_DGRAM      Unterstützt Datagramme (verbindungslose,  unzuverlässige  Nachrichten  mit  einer  festen
                       Maximallänge).

       SOCK_SEQPACKET  Bietet        einen        sequenziellen,       verlässlichen,       verbindungsbasierten
                       Zwei-Wege-Übertragungspfad für Datagramme einer festen maximalen Länge; ein Abnehmer  ist
                       erforderlich, um mit jedem Eingabe-Systemaufruf ein ganzes Paket zu lesen.

       SOCK_RAW        Bietet Zugriff auf das »rohe« Netzwerkprotokoll.

       SOCK_RDM        Bietet eine zuverlässige Datagramm-Ebene, die aber keine Reihenfolge garantiert.

       SOCK_PACKET     Veraltet und sollte nicht in neuen Programmen verwendet werden; siehe packet(7).

       Einige Socket-Typen sind möglicherweise nicht von allen Protokollfamilien implementiert.

       Seit Linux 2.6.27 dient das Argument type einem zweiten Zweck: Zusätzlich zur Angabe des Socket-Typs kann
       es  ein  bitweises  ODER  von  einem  der  folgenden  Werte  enthalten,  um das Verhalten von socket() zu
       verändern:

       SOCK_NONBLOCK   Setzt den Dateistatus-Schalter O_NONBLOCK für den  neu  geöffneten  Dateideskriptor.  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.

       Das protocol bezeichnet ein spezielles Protokoll, das auf diesem Socket benutzt wird. Normalerweise  gibt
       es  nur  ein  einziges  Protokoll,  das von einem speziellen Sockettyp einer Protokollfamilie unterstützt
       wird. In diesem Fall kann protocol als 0 angegeben werden. Nichtsdestotrotz ist es möglich, dass  mehrere
       Protokolle  existieren.  In  diesem  Fall  muss  das  zu  Verwendende auf diese Art angegeben werden. Die
       Protokollnummer ist individuell für die bestimmte »Kommunikations-Domain«. Siehe dazu auch  protocols(5).
       Lesen  Sie  getprotoent(3),  um zu erfahren, wie Sie die Protokollnamenzeichenketten auf Protokollnummern
       abbilden.

       Sockets des Typs SOCK_STREAM sind Vollduplex-Byte-Streams.  Sie  erhalten  die  Grenzen  von  Datensätzen
       nicht.  Ein  Stream-Socket muss sich in einem connected-Status befinden, bevor mit ihm irgendwelche Daten
       gesendet oder empfangen werden können. Eine Verbindung  zu  einem  anderen  Socket  wird  mit  connect(2)
       hergestellt.  Einmal verbunden können Daten mit read(2) und write(2) übertragen werden bzw. mit Varianten
       von send(2)  oder recv(2).  Wenn  eine  Sitzung  abgeschlossen  ist,  kann  close(2)  ausgeführt  werden.
       Out-of-band Daten können, wie in send(2) und recv(2) beschrieben, gesendet und empfangen werden.

       Die  Kommunikationsprotokolle,  die  ein  SOCK_STREAM implementieren, gewährleisten, dass die Daten nicht
       verloren gehen oder dupliziert werden. Falls ein  Datenelement,  für  das  das  Peer-Protokoll  Platz  im
       Pufferspeicher  bereithält,  nicht  erfolgreich innerhalb einer angemessenen Zeitspanne übertragen werden
       kann, dann wird die Verbindung als »tot« betrachtet. Falls SO_KEEPALIVE für  den  Socket  aktiviert  ist,
       überprüft  das  Protokoll auf eine protokollspezifische Weise, ob das andere Ende »noch am Leben« ist. Es
       wird ein SIGPIPE-Signal ausgelöst, wenn ein Prozess auf einem unterbrochenen Stream sendet oder empfängt;
       naive Prozesse, die das Signal nicht  abfangen,  werden  beendet.  SOCK_SEQPACKET-Sockets  verwenden  die
       gleichen  Systemaufrufe  wie  SOCK_STREAM-Sockets. Der einzige Unterschied ist, dass Aufrufe von read (2)
       nur die Menge an angeforderten Daten zurückgeben  und  alle  verbleibenden  Daten  im  ankommenden  Paket
       verwerfen. Ebenso werden alle Nachrichtengrenzen in eingehenden Datagrammen beibehalten.

       SOCK_DGRAM-   und  SOCK_RAW-Sockets  ermöglichen  das  Senden  von  Datagrammen  zu  Empfängern,  die  in
       send(2)-Aufrufen benannt werden. Datagramme werden  grundsätzlich  mit  recvfrom(2)  empfangen,  das  das
       nächste Datagramm zusammen mit der Absenderadresse zurückliefert.

       SOCK_PACKET  ist ein veralteter Socket-Typ für den Empfang von Rohdaten direkt vom Treiber. Verwenden Sie
       stattdessen packet(7).

       Mit einer fcntl(2)-F_SETOWN-Operation kann ein Prozess oder eine Prozessgruppe angegeben werden,  der/die
       ein   SIGURG   empfangen   soll,   wenn   Out-of-Band-Daten   eintreffen,   oder   SIGPIPE,   wenn   eine
       SOCK_STREAM-Verbindung unerwartet unterbrochen wird. Diese Operation kann auch verwendet werden,  um  den
       Prozess  oder  die  Prozessgruppe festzulegen, welche(r) die E/A und die asynchrone Benachrichtigung über
       E/A-Ereignisse mittels SIGIO empfängt. Die Verwendung von F_SETOWN entspricht einem Aufruf  von  ioctl(2)
       mit den Argumenten FIOSETOWN oder SIOCSPGRP.

       Wenn  das Netzwerk dem Protokollmodul einen Fehlerzustand signalisiert (z.B. mittels einer ICMP-Nachricht
       für IP) wird für den Socket der Schalter für einen anstehenden Fehler gesetzt. Die nächste Operation  auf
       diesem Socket liefert den Fehlercode des anstehenden Fehlers. Bei manchen Protokollen ist es möglich, für
       jeden  Socket  eine  Fehler-Warteschlange  zu  aktivieren,  um detaillierte Informationen über den Fehler
       abrufen zu können; siehe IP_RECVERR in ip(7).

       Die Arbeitsweise von Sockets wird von Socket-Level-Optionen gesteuert. Diese sind  in  der  Include-Datei
       <sys/socket.h>  definiert.  setsockopt(2) und getsockopt(2) werden verwendet, um diese Optionen zu setzen
       bzw. zu lesen.

RÜCKGABEWERT

       Bei Erfolg wird ein Dateideskriptor für  den  neuen  Socket  zurückgegeben.  Bei  einem  Fehler  wird  -1
       zurückgegeben und errno entsprechend gesetzt.

FEHLER

       EACCES Es ist dem Prozess nicht erlaubt, einen Socket von angegebenen Typ und/oder Protokoll zu erzeugen.

       EAFNOSUPPORT
              Die Implementierung unterstützt die angegebene Adressfamilie nicht.

       EINVAL Unbekanntes Protokoll oder Protokollfamilie nicht verfügbar.

       EINVAL Ungültige Schalter in type.

       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 oder ENOMEM
              Es ist nicht ausreichend Speicher verfügbar. Der Socket kann nicht erzeugt werden, bis ausreichend
              Ressourcen freigegeben wurden.

       EPROTONOSUPPORT
              Der  Protokolltyp  oder  das  angegebene  Protokoll  wird  von  dieser Kommunikations-Domain nicht
              unterstützt.

       Andere Fehler können von den unterliegenden Protokollmodulen erzeugt werden.

KONFORM ZU

       POSIX.1-2001, POSIX.1-2008, 4.4BSD.

       Die Schalter SOCK_NONBLOCK und SOCK_CLOEXEC sind Linux-speziifisch.

       socket() erschien in 4.2BSD. Es ist grundsätzlich zu/von Nicht-BSD-Systemen  portierbar,  die  Clone  der
       BSD-Socket-Schicht unterstützen (einschließlich System-V-Varianten).

ANMERKUNGEN

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

       Die unter 4.x BSD verwendeten Manifest-Konstanten für Protokollfamilien  sind  PF_UNIX,  PF_INET  und  so
       weiter,  währen  AF_UNIX,  AF_INET  und  so weiter für Adressfamilien verwendet werden. Jedoch verspricht
       schon die BSD-Handbuchseite:»The protocol family generally  is  the  same  as  the  address  family«  und
       nachfolgende Standards verwenden überall AF_.

       Der  AF_ALG-Protokolltyp wurde in Linux 2.6.38 hinzugefügt. Weitere Informationen zu dieser Schnittstelle
       finden Sie in der Kernel-Dokumentation auf https://www.kernel.org/doc/htmldocs/crypto-API/User.html.

BEISPIEL

       Ein Beispiel für die Verwendung von socket() ist in getaddrinfo(3) dargestellt.

SIEHE AUCH

       accept(2),  bind(2),  close(2),  connect(2),  fcntl(2),  getpeername(2),  getsockname(2),  getsockopt(2),
       ioctl(2),   listen(2),  read(2),  recv(2),  select(2),  send(2),  shutdown(2),  socketpair(2),  write(2),
       getprotoent(3), ip(7), socket(7), tcp(7), udp(7), unix(7)

       “An  Introductory  4.3BSD  Interprocess  Communication  Tutorial”  und  “BSD  Interprocess  Communication
       Tutorial”, nochmals in UNIX Programmer's Supplementary Documents Volume 1 gedruckt.

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  des Projekts Linux-man-pages. Eine Beschreibung des
       Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
       sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von  Martin  Schulze  <joey@infodrom.org>,  Sebastian
       Rittau  <srittau@jroger.in-berlin.de>,  Helge  Kreutzmann <debian@helgefjell.de>, Martin Eberhard Schauer
       <Martin.E.Schauer@gmx.de>, Mario Blättermann  <mario.blaettermann@gmail.com>  und  Dr.  Tobias  Quathamer
       <toddy@debian.org> erstellt.

       Diese  Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 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
       <debian-l10n-german@lists.debian.org>.

Linux                                          15. September 2017                                      SOCKET(2)