bionic (2) socket.2.gz

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