socket

SOCKET(2)                        Systemaufrufe                       SOCKET(2)



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.

       Zur Zeit werden folgende Domains unterstützt:


              AF_UNIX  (UNIX interne Protokolle)

              AF_INET  (ARPA Internet Protokolle)

              AF_ISO   (ISO Protokolle)

              AF_NS    (Xerox Network Systems Protokolle)

              AF_IMPLINK
                       (IMP “host at IMP” Link Ebene)

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

              SOCK_STREAM
              SOCK_DGRAM
              SOCK_RAW
              SOCK_SEQPACKET
              SOCK_RDM

       Ein Socket vom Typ SOCK_STREAM stellt einen sequenziellen,
       verläÃlichen, zwei-weg-basierten Byte-Stream zur Verfügung.  Ein
       "out-of-band" Ãbertragungsmechanismus kann unterstützt werden.  Ein
       Socket vom Typ SOCK_DGRAM bietet Datagramme (verbindungslos,
       unverläÃliche Nachricht einer festen (meist kleinen) maximalen
       Länge).  Ein SOCK_SEQPACKET Socket kann einen sequenziellen,
       verläÃlichen, zwei-weg-basierten Ãbertragungspfad für Datagramme
       einer festen maximalen Länge bieten.  Möglicherweise wird vom lokalen
       Endpunkt erwartet, daà er ein komplettes Paket mit jedem read System-
       Call liest.  Diese Art ist protokollspezifisch und zur Zeit nur für
       AF_NS implementiert.  SOCK_RAW Sockets stellen Zugriff auf interne
       Netzwerkprotokolle und Schnittstellen zur Verfügung.  Die Typen
       SOCK_RAW, der nur für den Superuser (=root) zugänglich ist, und
       SOCK_RDM, der geplant aber noch nicht implementiert ist, werden hier
       nicht beschrieben.

       Das 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, daà mehrere Protokolle existieren.
       In diesem Fall muà das zu verwendende auf diese Art angegeben werden.
       Die Protokollnummer ist individuell für eine bestimmte
       "Kommunikationsdomain".  Siehe dazu auch protocols(5).

       Sockets des Typs SOCK_STREAM sind voll-duplex-orientierte Byte-Streams,
       ähnlich wie Pipes.  Ein Stream-Socket muà sich in einem connected
       Stadium 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, daà 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, daà die
       Verbindung kaputt ("broken") ist und Aufrufe zeigen einen Fehler an,
       indem sie -1 zurückgeben und ETIMEDOUT als entsprchenden Wert in der
       globalen Variable errno setzen.  Die Protokolle halten den Socket unter
       Umständen warm, indem sie ca. jede Minute eine Ãbertragung erzwingen,
       wenn keine anderen Aktivitäten vorliegen.  Ein Fehler wird angezeigt,
       wenn keine Antwort auf einer sonst stillen Verbindung in einer
       erweiterten Zeitspanne (z.B. 5 Minuten) erzielt werden kann.  Ein
       SIGPIPE-Signal wird erzeugt, wenn ein Prozeà auf einen kaputten Stream
       sendet; das verursacht bei naive Prozesse, die das Signal nicht
       verarbeiten, ein Programmende.

       SOCK_SEQPACKET-Sockets setzen dieselben Systemcalls ein wie
       SOCK_STREAM-Sockets.  Der einzige Unterschied besteht darin, daÃ
       read(2) nur die angeforderte Menge an Daten zurückliefert und alle
       restlichen verwirft.

       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.

       Ein fcntl(2) Aufruf kann benutzt werden, um ein ProzeÃgruppe zu
       spezifizieren, die ein SIGURG-Signal empfangen soll, wenn out-of-band
       Daten ankommen.  So kann ebenfalls eingestellt werden, daà non-blocking
       I/O und asynchrone Benachrichtigung von I/O Ereignissen  via SIGIO
       vorgenommen werden.

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

       EMFILE  Die Deskriptor-Tabelle des Prozesses ist voll.

       ENFILE  Die System-Dateitabelle ist voll.

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

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

GESCHICHTE
       Die socket Funktion taucht in BSD 4.2 auf.

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" is reprinted in UNIX
       Programmer's Supplementary Documents Volume 1

       "BSD Interprocess Communication Tutorial" is reprinted in UNIX
       Programmer's Supplementary Documents Volume 1



BSD Man Page                      2. Mai 1996                        SOCKET(2)