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

Linux                                            19. Januar 2009                                       SOCKET(2)