Provided by:
manpages-de-dev_0.10-1_all 
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 zugehorigen
Deskriptor zuruck.
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 unterstutzt:
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, verlasslichen, zwei-Wege,
verbindungsbasierten Bytestream zur Verfugung. Ein "out-of-
band"-Ubertragungsmechanismus kann unterstutzt werden.
SOCK_DGRAM
bietet Datagramme (verbindungslos, unverlassliche Nachricht
einer festen (meist kleinen) maximalen Lange).
SOCK_SEQPACKET
bietet einen sequenziellen, verlasslichen, zwei-Weg-basierten
Ubertragungspfad fur Datagramme einer festen maximalen Lange.
Der Empfanger muss ein ganzes Paket mit jedem Funktionsaufruf
lesen.
SOCK_RAW
stellt Zugriff auf interne Netzwerkprotokolle und Schnittstellen
zur Verfugung.
SOCK_RDM
bietet eine verlassliche 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 unterstutzt wird.
Nichtsdestotrotz ist es moglich, dass mehrere Protokolle existieren.
In diesem Fall muss das zu verwendende Protokoll auf diese Art
angegeben werden. Die Protokollnummer ist individuell fur eine
bestimmte "Kommunikationsdomain". Siehe dazu auch protocols(5).
In getprotoent(3), ist beschrieben, wie Protokollnamen in
Protokollnummern umgewandelt werden konnen.
Sockets des Typs SOCK_STREAM sind vollduplex-orientierte Bytestreams,
ahnlich 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 konnen. Eine
Verbindung zu einem anderen Socket wird mit connect(2) hergestellt.
Einmal verbunden, konnen Daten mit read(2) und write(2) ubertragen
werden bzw. mit Varianten von send(2) oder recv(2). Wenn eine
Verbindung abgebaut werden soll, wird close(2) ausgefuhrt. Out-of-band
Daten konnen, 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, fur das das Partnerprotokoll
ausreichend Puffer zur Verfugung hat, in einem angemessenen Zeitraum
nicht erfolgreich ubertragen werden kann, wird angenommen, dass die
Verbindung unterbrochen ("broken") ist. Wenn SO_KEEPALIVE fur den
Socket gesetzt ist, uberpruft 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 zuruckliefert und alle
restlichen verwirft. AuBerdem werden alle Nachrichtengrenzen der
eingehenden Datagramme beibehalten.
SOCK_DGRAM- und SOCK_RAW-Sockets erlauben das Senden von Datagrammen zu
Empfangern, die im send(2) Aufruf genannt werden. Datagramme werden
grundsatzlich mit recvfrom(2) empfangen, das das nachste Datagramm
zusammen mit der Absenderadresse zuruckliefert.
SOCK_PACKET ist ein veralteter Socket-Typ, um rohe Pakete direkt vom
Geratetreiber 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
erhalt. 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 nachste
Funktionsaufruf fur diesen Socket liefert den Code des Fehlers zuruck.
Bei manchen Protokollen ist es moglich, eine socket-spezifische
Fehlerliste einzuschalten, um genaue Informationen uber 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 fur Protokoll-Familien sind
PF_UNIX, PF_INET usw., wahrend AF_UNIX usw. fur Adressfamilien verwandt
werden. Allerdings verspricht die BSD Handbuchseite bereits: "Die
Protokollfamilie ist generell dieselbe wie die Adressfamilie", und die
folgenden Standards benutzen uberall AF_*.
R"UCKGABEWERTE
-1 wird zuruckgegeben, wenn ein Fehler auftritt, ansonsten wird die
Nummer des Deskriptors zuruckgegeben, der den Socket referenziert.
FEHLER
EPROTONOSUPPORT
Der Protokolltyp, der in protocol angegeben ist, wird nicht von
dieser Kommunikationsdomain unterstutzt.
ENFILE Es ist nicht genugend 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 verfugbar. Der Socket kann
nicht erzeugt werden bis ausreichend Ressourcen freigemacht
wurden.
EINVAL Unbekanntes Protokoll oder Protokollfamilie nicht verfugbar.
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 unterstutzen
(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.