Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       socket - erzeuge einen Kommunikationsendpunkt

       Diese  Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
       die englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 2 socket

       eingeben.

SYNTAX

       #include <sys/types.h>
       #include <sys/socket.h>

       int socket(int domain, int type, int protocol);

BESCHREIBUNG

       Socket erzeugt einen Kommunikationsendpunkt und  gibt  den  zugehörigen
       Deskriptor zurück.

       Der  Parameter domain spezifiziert die Kommunikationsdomain, in der die
       Kommunikation stattfinden soll, also die Protokollfamilie, die  benutzt
       werden  soll.  Diese  Familien sind in der Include-Datei <sys/socket.h>
       definiert.

       Zurzeit werden folgende Domains unterstützt:

       Name               Zweck                             Handbuchseite
       PF_UNIX,PF_LOCAL   Lokale Kommunikation              unix(7)
       PF_INET            IPv4 Internet-Protokoll           ip(7)
       PF_INET6           IPv6 Internet-Protokoll
       PF_IPX             IPX - Novell-Protokoll
       PF_NETLINK         Kernel User Interface Device      netlink(7)
       PF_X25             ITU-T X.25 / ISO-8208-Protokoll   x25(7)
       PF_AX25            Amateur-Radio AX.25-Protokoll
       PF_ATMPVC          Zugriff auf raw ATM PVCs
       PF_APPLETALK       Appletalk                         ddp(7)
       PF_PACKET          Low-Level Paketschnittstelle      packet(7)

       Der  Socket  hat  den  in  type  angegebenen  Typ,  der  die  Art   der
       Kommunikation bestimmt. Zurzeit sind folgende Arten definiert:

       SOCK_STREAM
              stellt    einen    sequenziellen,    verlässlichen,   zwei-Wege,
              verbindungsbasierten  Bytestream  zur  Verfügung.  Ein  “out-of-
              band”-Übertragungsmechanismus kann unterstützt werden.

       SOCK_DGRAM
              bietet   Datagramme  (verbindungslos,  unverlässliche  Nachricht
              einer festen (meist kleinen) maximalen Länge).

       SOCK_SEQPACKET
              bietet einen  sequenziellen,  verlässlichen,  zwei-Weg-basierten
              Übertragungspfad  für  Datagramme  einer festen maximalen Länge.
              Der Empfänger muss ein ganzes Paket  mit  jedem  Funktionsaufruf
              lesen.

       SOCK_RAW
              stellt Zugriff auf interne Netzwerkprotokolle und Schnittstellen
              zur Verfügung.

       SOCK_RDM
              bietet eine verlässliche Datagramm-Schicht, die  kein  Sortieren
              garantiert.

       SOCK_PACKET
              ist  veraltet  und  sollte  nicht  in  neuen  Programmen benutzt
              werden. Siehe packet(7).

       protocol bezeichnet ein spezielles Protokoll,  das  auf  diesem  Socket
       benutzt wird. Normalerweise gibt es nur ein einziges Protokoll, das von
       einem  speziellen  Socket  einer  Protokollfamilie  unterstützt   wird.
       Nichtsdestotrotz ist es möglich, dass mehrere Protokolle existieren. In
       diesem Fall muss das zu verwendende Protokoll auf diese  Art  angegeben
       werden.   Die   Protokollnummer  ist  individuell  für  eine  bestimmte
       “Kommunikationsdomain”. Siehe dazu auch protocols(5).

       In   getprotoent(3),   ist   beschrieben,   wie    Protokollnamen    in
       Protokollnummern umgewandelt werden können.

       Sockets  des  Typs SOCK_STREAM sind vollduplex-orientierte Bytestreams,
       ähnlich wie Pipes. Sie erhalten die Record-Grenzen nicht.  Ein  Stream-
       Socket  muss  sich  in  einem  connected-Modus  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
       Verbindung abgebaut werden soll, wird close(2) ausgeführt.  Out-of-band
       Daten  können, wie in send(2) beschrieben, gesendet und, wie in recv(2)
       beschrieben, empfangen werden.

       Die Kommunikationsprotokolle, die verwendet werden, um ein  SOCK_STREAM
       zu implementieren, stellen sicher, dass Daten weder verloren gehen noch
       verdoppelt  werden.  Wenn  ein  Datum,  für  das  das  Partnerprotokoll
       ausreichend  Puffer  zur  Verfügung hat, in einem angemessenen Zeitraum
       nicht erfolgreich übertragen werden kann,  wird  angenommen,  dass  die
       Verbindung  unterbrochen  (“broken”)  ist.  Wenn  SO_KEEPALIVE  für den
       Socket   gesetzt   ist,    überprüft    das    Protokoll    auf    eine
       protokollspezifische  Art, ob das andere Ende noch immer existiert. Ein
       SIGPIPE-Signal wird erzeugt,  wenn  ein  Prozess  versucht,  auf  einem
       kaputten Stream zu senden oder zu empfangen. Dies beendet Prozesse, die
       das Signal nicht verarbeiten.

       SOCK_SEQPACKET-Sockets    benutzen    dieselben     Systemcalls     wie
       SOCK_STREAM-Sockets.   Der  einzige  Unterschied  besteht  darin,  dass
       read(2) nur die angeforderte Menge  an  Daten  zurückliefert  und  alle
       restlichen   verwirft.  Außerdem  werden  alle  Nachrichtengrenzen  der
       eingehenden Datagramme beibehalten.

       SOCK_DGRAM- und SOCK_RAW-Sockets erlauben das Senden von Datagrammen zu
       Empfängern,  die  im  send(2)  Aufruf genannt 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, um rohe Pakete direkt vom
       Gerätetreiber zu empfangen. Benutzen Sie stattdessen packet(7).

       Ein fcntl(2)-Aufruf kann mit dem F_SETOWN-Argument benutzt  werden,  um
       eine  Prozessgruppe  anzugeben,  die  ein SIGURG-Signal empfangen soll,
       wenn out-of-band Daten ankommen, oder  ein  SIGPIPE-Signal,  wenn  eine
       SOCK_STREAM-Verbindung  unerwartet zusammenbricht. Damit kann ebenfalls
       der Prozess oder die Prozessgruppe eingestellt werden, welche  I/O  und
       asynchrone  Benachrichtigung  von  I/O-Ereignissen mit dem SIGIO-Signal
       erhält. F_SETOWN zu benutzen entspricht dem Aufruf  der  Systemfunktion
       ioctl(2) mit dem Argument SIOSETOWN

       Wenn  das  Netzwerk dem Protokollmodul einen Fehler meldet (z. B. durch
       eine ICMP-Nachricht unter IP), wird der Flag  gesetzt,  der  auf  einen
       unbearbeiteten   Fehler   (“pending   error”)   hinweist.  Der  nächste
       Funktionsaufruf für diesen Socket liefert den Code des Fehlers  zurück.
       Bei   manchen  Protokollen  ist  es  möglich,  eine  socket-spezifische
       Fehlerliste einzuschalten, um genaue Informationen über den  Fehler  zu
       erhalten. Siehe IP_RECEIVER 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.

BEMERKUNG

       Die unter BSD 4.*  benutzten  Konstanten  für  Protokoll-Familien  sind
       PF_UNIX, PF_INET usw., während AF_UNIX usw. für Adressfamilien verwandt
       werden. Allerdings  verspricht  die  BSD  Handbuchseite  bereits:  “Die
       Protokollfamilie  ist generell dieselbe wie die Adressfamilie”, und die
       folgenden Standards benutzen überall AF_*.

RÜCKGABEWERTE

       -1 wird zurückgegeben, wenn ein Fehler  auftritt,  ansonsten  wird  die
       Nummer des Deskriptors zurückgegeben, der den Socket referenziert.

FEHLER

       EPROTONOSUPPORT
              Der  Protokolltyp, der in protocol angegeben ist, wird nicht von
              dieser Kommunikationsdomain unterstützt.

       ENFILE Es ist nicht genügend Kernelspeicher  vorhanden,  um  eine  neue
              Socket-Struktur anzulegen.

       EMFILE Die Dateideskriptortabelle des Prozesses ist voll.

       EACCESS
              Es  ist  dem Prozess nicht erlaubt, einen Socket vom angegebenen
              Typ und/oder Protokoll zu erzeugen.

       ENOBUFS oder ENOMEM
              Es ist nicht ausreichend Speicher  verfügbar.  Der  Socket  kann
              nicht  erzeugt  werden  bis  ausreichend  Ressourcen freigemacht
              wurden.

       EINVAL Unbekanntes Protokoll oder Protokollfamilie nicht verfügbar.

KONFORM ZU

       4.4BSD (die socket-Funktion taucht in BSD 4.2 auf).  Generell  portabel
       auf/von   nicht-BSD-Systemen,  die  den  BSD-Socket-Layer  unterstützen
       (inklusive System-V-Varianten).

BUGS

       SOCK_UUCP ist noch nicht implementiert.

SIEHE AUCH

       accept(2),   bind(2),   connect(2),   getprotoent(3),   getsockname(2),
       getsockopt(2),   ioctl(2),   listen(2),  read(2),  recv(2),  select(2),
       send(2), shutdown(2), socketpair(2), write(2)

       “An Introductory 4.3 BSD Interprocess Communication  Tutorial”  ist  in
       UNIX Programmer's Supplementary Documents Volume 1 abgedruckt.

       “BSD  Interprocess  Communication  Tutorial“  ist  in UNIX Programmer's
       Supplementary Documents Volume 1 abgedruckt.