Provided by: manpages-de-dev_1.4-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 Deskriptor zurück.

       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)

       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;
       beispielsweise ist SOCK_SEQPACKET nicht für AF_INET 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, ähnlich wie Pipes. 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 Überlauf der Prozessdateitabelle

       ENFILE Die Systembeschrä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

       4.4BSD, POSIX.1-2001.

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

       This  page  is  part  of release 3.54 of the Linux man-pages project. A description of the
       project,    and    information    about    reporting    bugs,    can    be    found     at
       http://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> und Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> 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>.