Provided by: manpages-de-dev_0.5-4.1ubuntu1_all bug

BEZEICHNUNG

       socket - erzeuge einen Kommunikationsendpunkt

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 Programmers Supplementary Documents Volume 1 abgedruckt.

       “BSD Interprocess Communication  Tutorial“  ist  in  UNIX  Programmers
       Supplementary Documents Volume 1 abgedruckt.