Socket(2) System Calls Manual Socket(2) BEZEICHNUNG socket - einen Kommunikationsendpunkt erzeugen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int socket(int Domain, int type, int Protokoll); BESCHREIBUNG socket() erzeugt einen Kommunikationsendpunkt und gibt einen Dateideskriptor zuruck, der diesen Endpunkt referenziert. Der von einem erfolgreichen Aufruf zuruckgelieferte Dateideskriptor wird der Dateidesriptor mit der niedrigsten Nummer sein, die noch nicht fur den Prozess offen ist. Der Parameter Domain spezifiziert eine Kommunikations-Domain; dies wahlt die Protokollfamilie aus, die benutzt werden soll. Diese Familien sind in definiert. Zu den derzeit vom Linux Kernel verstandenen Formaten gehoren: Name Zweck Handbuchseite AF_UNIX Lokale Kommunikation unix(7) AF_LOCAL Synonym fur AF_UNIX AF_INET IPv4-Internet-Protokolle ip(7) AF_AX25 Amateurfunk-Protokoll AX.25 . ax25(4) AF_IPX IPX-Novell-Protokolle AF_APPLETALK AppleTalk ddp(7) AF_X25 ITU-T X.25 / ISO/IEC-8208-Protokoll x25(7) AF_INET6 IPv6-Internet-Protokolle ipv6(7) AF_DECnet DECet-Protokoll-Sockets AF_KEY Schlusselverwaltungsprotokoll, ursprunglich fur den Einsatz mit IPsec entwickelt AF_NETLINK Kernel-Benutzerschnittstellengerat netlink(7) AF_PACKET Systemnahe Paketschnittstelle packet(7) AF_RDS . >>Reliable Datagram Sockets . . rds(7) (RDS)<<-Protokoll rds-rdma(7) AF_PPPOX Generische PPP-Transportschicht, fur die Einrichtung von L2-Tunneln (L2TP und PPPoE) AF_LLC . Logische-Link-Steuerung-Protokoll (IEEE 802.2 LLC) AF_IB . Native InfiniBand-Adressierung AF_MPLS . Multiprotocol Label Switching AF_CAN . >>Controller Area Network<<-Automobilbusprotokoll AF_TIPC . TIPC, >>cluster domain sockets<<-Protokoll AF_BLUETOOTH . Systemnahes Bluetooth-Socket-Protokoll AF_ALG . Schnittstelle zur Kernel-Crypto-API AF_VSOCK . VSOCK- (ursprunglich >>VMWare vsock(7) VSockets<<-)Protokoll fur Hypervisor-Gast-Kommunikation AF_KCM . KCM (kernel connection multiplexer)-Schnittstelle AF_XDP . XDP (express data path)-Schnittstelle Weitere Details uber die obigen Adressfamilien sowie Informationen uber eine Reihe anderer Adressfamilien kann in address_families(7) gefunden werden. Der Socket hat den in type angegebenen Typ, welcher die Kommunikationssemantik festlegt. Derzeit sind folgende Typen definiert: SOCK_STREAM Stellt sequentielle, zuverlassige, verbindungsorientierte Zweiweg-Bytestreams bereit. Ein >>Out-of-Band<<-Datenubertragungsmechanismus kann unterstutzt werden. SOCK_DGRAM Unterstutzt Datagramme (verbindungslose, unzuverlassige Nachrichten mit einer festen Maximallange). SOCK_SEQPACKET Bietet einen sequenziellen, verlasslichen, verbindungsbasierten Zwei-Wege-Ubertragungspfad fur Datagramme einer festen maximalen Lange; 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 zuverlassige 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 moglicherweise nicht von allen Protokollfamilien implementiert. Seit Linux 2.6.27 dient das Argument type einem zweiten Zweck: Zusatzlich zur Angabe des Socket-Typs kann es ein bitweises ODER von einem der folgenden Werte enthalten, um das Verhalten von socket() zu verandern: SOCK_NONBLOCK Setzt den Dateistatus-Schalter O_NONBLOCK fur die geoffnete Datei-Deskription (siehe open(2)), auf die sich der neue Dateideskriptor bezieht. Die Verwendung dieses Schalters spart zusatzliche Aufrufe von fcntl(2), um das gleiche Ergebnis zu erreichen. SOCK_CLOEXEC Setzt den Schalter >>Schliessen bei Ausfuhrung<< (close-on-exec, FD_CLOEXEC) fur den neuen Dateideskriptor. Lesen Sie die Beschreibung des Schalters O_CLOEXEC in open(2), um die Grunde zu beleuchten, warum dies nutzlich sein konnte. Das Protokoll bezeichnet ein spezielles Protokoll, das auf diesem Socket benutzt wird. Normalerweise gibt es nur ein einziges Protokoll, das von einem speziellen Sockettyp einer Protokollfamilie unterstutzt wird. In diesem Fall kann Protokoll als 0 angegeben werden. Nichtsdestotrotz ist es moglich, dass mehrere Protokolle existieren. In diesem Fall muss das zu Verwendende auf diese Art angegeben werden. Die Protokollnummer ist individuell fur 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 Datensatzen nicht. Ein Stream-Socket muss sich in einem connected-Status befinden, bevor mit ihm irgendwelche Daten gesendet oder empfangen werden konnen. Eine Verbindung zu einem anderen Socket wird mit connect(2) hergestellt. Einmal verbunden konnen Daten mit read(2) und write(2) ubertragen werden bzw. mit Varianten von send(2) oder recv(2). Wenn eine Sitzung abgeschlossen ist, kann close(2) ausgefuhrt werden. Out-of-band Daten konnen, wie in send(2) und recv(2) beschrieben, gesendet und empfangen werden. Die Kommunikationsprotokolle, die ein SOCK_STREAM implementieren, gewahrleisten, dass die Daten nicht verloren gehen oder dupliziert werden. Falls ein Datenelement, fur das das Peer-Protokoll Platz im Pufferspeicher bereithalt, nicht erfolgreich innerhalb einer angemessenen Zeitspanne ubertragen werden kann, dann wird die Verbindung als >>tot<< betrachtet. Falls SO_KEEPALIVE fur den Socket aktiviert ist, uberpruft das Protokoll auf eine protokollspezifische Weise, ob das andere Ende >>noch am Leben<< ist. Es wird ein SIGPIPE-Signal ausgelost, wenn ein Prozess auf einem unterbrochenen Stream sendet oder empfangt; 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 zuruckgeben und alle verbleibenden Daten im ankommenden Paket verwerfen. Ebenso werden alle Nachrichtengrenzen in eingehenden Datagrammen beibehalten. SOCK_DGRAM- und SOCK_RAW-Sockets ermoglichen das Senden von Datagrammen zu Empfangern, die in send(2)-Aufrufen benannt werden. Datagramme werden grundsatzlich mit recvfrom(2) empfangen, das das nachste Datagramm zusammen mit der Absenderadresse zuruckliefert. SOCK_PACKET ist ein veralteter Socket-Typ fur 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 Aktion kann auch verwendet werden, um den Prozess oder die Prozessgruppe festzulegen, welche(r) die E/A und die asynchrone Benachrichtigung uber E/A-Ereignisse mittels SIGIO empfangt. 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 fur IP) wird fur den Socket der Schalter fur einen anstehenden Fehler gesetzt. Die nachste Operation auf diesem Socket liefert den Fehlercode des anstehenden Fehlers. Bei manchen Protokollen ist es moglich, fur jeden Socket eine Fehler-Warteschlange zu aktivieren, um detaillierte Informationen uber den Fehler abrufen zu konnen; siehe IP_RECVERR in ip(7). Die Arbeitsweise von Sockets wird von Socket-Level-Optionen gesteuert. Diese sind in der Include-Datei definiert. setsockopt(2) und getsockopt(2) werden verwendet, um diese Optionen zu setzen und zu lesen. RUCKGABEWERT Bei Erfolg wird ein Dateideskriptor fur den neuen Socket zuruckgegeben. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER EACCES Es ist dem Prozess nicht erlaubt, einen Socket von angegebenen Typ und/oder Protokoll zu erzeugen. EAFNOSUPPORT Die Implementierung unterstutzt die angegebene Adressfamilie nicht. EINVAL Unbekanntes Protokoll oder Protokollfamilie nicht verfugbar. EINVAL Ungultige Schalter in type. EMFILE Die Beschrankung pro Prozess der Anzahl offener Datei-Deskriptoren wurde erreicht. ENFILE Die systemweite Beschrankung fur die Gesamtzahl offener Dateien wurde erreicht. ENOBUFS oder ENOMEM Es ist nicht ausreichend Speicher verfugbar. Der Socket kann nicht erzeugt werden, bis ausreichend Ressourcen freigegeben wurden. EPROTONOSUPPORT Der Protokolltyp oder das angegebene Protokoll wird von dieser Kommunikations-Domain nicht unterstutzt. Andere Fehler konnen von den unterliegenden Protokollmodulen erzeugt werden. VERSIONEN POSIX.1-2024 spezifiziert SOCK_CLOFORK, aber Linux unterstutzt das nicht. STANDARDS POSIX.1-2024. GESCHICHTE POSIX.1-2001, 4.2BSD. Er ist allgemein zu/von Nicht-BSD-Systemen portierbar, die Klons der BSD-Socket-Schicht unterstutzen (einschliesslich System-V-Varianten). Die unter 4.x BSD verwendeten Manifest-Konstanten fur Protokollfamilien sind PF_UNIX, PF_INET und so weiter, wahren AF_UNIX, AF_INET und so weiter fur Adressfamilien verwendet werden. Jedoch verspricht schon die BSD-Handbuchseite:>>The protocol family generally is the same as the address family<< und nachfolgende Standards verwenden uberall AF_. SOCK_NONBLOCK SOCK_CLOEXEC POSIX.1-2024. BEISPIELE Ein Beispiel fur 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), address_families(7), 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. UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Sebastian Rittau , Helge Kreutzmann , Martin Eberhard Schauer , Mario Blattermann und Dr. Tobias Quathamer erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.18 29. Oktober 2025 Socket(2)