socket

SOCKET(2)                  Linux-Programmierhandbuch                 SOCKET(2)



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 vom Linux
       Kernel verstandenen Formaten gehören:

       Name         Zweck                                      Handbuchseite
       AF_UNIX      Lokale Kommunikation                       unix(7)
       AF_LOCAL     Synonym für 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-8208-Protokoll           x25(7)
       AF_INET6     IPv6-Internet-Protokolle                   ipv6(7)
       AF_DECnet    DECet-Protokoll-Sockets
       AF_KEY       Schlüsselverwaltungsprotokoll,
                    ursprünglich für den Einsatz mit IPsec
                    entwickelt
       AF_NETLINK   Kernel-Benutzerschnittstellengerät        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, für
                    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- (ursprünglich »VMWare             vsock(7)
                    VSockets«-)Protokoll für
                    Hypervisor-Gast-Kommunikation
       AF_KCM       KCM (kernel connection
                    multiplexor)-Schnittstelle
       AF_XDP       XDP (express data path)-Schnittstelle

       Weitere Details über die obigen Adressfamilien sowie Informationen
       über 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, 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 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.

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

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

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.02 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                            6. März 2019                       SOCKET(2)