'\" t .\" Copyright (c) 1983, 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)socket.2 6.8 (Berkeley) 3/10/91 .\" .\" Modified Sat Jul 24 10:36:46 1993 by Rik Faith (faith@cs.unc.edu) .\" Translated into german by Martin Schulze (joey@infodrom.north.de) .\" Modified Mon Jun 10 22:47:47 1996 by Martin Schulze (joey@linux.de) .\" Linux 2.0 modifications Tue May 02 16:34:00 2000 by Sebastian Rittau .\" (srittau@jroger.in-berlin.de) .\" .TH SOCKET 2 "2. Mai 2000" "Linux" "Systemaufrufe" .SH BEZEICHNUNG socket \- erzeuge einen Kommunikationsendpunkt .SH SYNTAX .B #include .br .B #include .sp .BI "int socket(int " domain ", int " type ", int " protocol ); .SH BESCHREIBUNG .B Socket erzeugt einen Kommunikationsendpunkt und gibt den zugehörigen Deskriptor zurück. .PP Der Parameter .I domain spezifiziert die Kommunikationsdomain, in der die Kommunikation stattfinden soll, also die Protokoll-Familie, die benutzt werden soll. Diese Familien sind in der Include-Datei .I definiert. .PP Zurzeit werden folgende Domains unterstützt: .PP .TS tab(:); l l l. Name:Zweck:Handbuchseite T{ .B PF_UNIX,PF_LOCAL T}:T{ Lokale Kommunikation T}:T{ .BR unix (7) T} T{ .B PF_INET T}:IPv4 Internet-Protokoll:T{ .BR ip (7) T} T{ .B PF_INET6 T}:IPv6 Internet-Protokoll: T{ .B PF_IPX T}:IPX \- Novell-Protokoll: T{ .B PF_NETLINK T}:T{ Kernel User Interface Device T}:T{ .BR netlink (7) T} T{ .B PF_X25 T}:ITU-T X.25 / ISO-8208-Protokoll:T{ .BR x25 (7) T} T{ .B PF_AX25 T}:T{ Amateur-Radio AX.25-Protokoll T}: T{ .B PF_ATMPVC T}:Zugriff auf raw ATM PVCs: T{ .B PF_APPLETALK T}:Appletalk:T{ .BR ddp (7) T} T{ .B PF_PACKET T}:T{ Low-Level Paket-Interface T}:T{ .BR packet (7) T} .TE .PP Der Socket hat den in .I type angegebenen Typ, der die Art der Kommunikation bestimmt. Zurzeit sind folgende Arten definiert: .TP .B SOCK_STREAM stellt einen sequenziellen, verlässlichen, zwei-wege, verbindungsbasierten Byte-Stream zur Verfügung. Ein \(lqout-of-band\(rq Übertragungsmechanismus kann unterstützt werden. .TP .B SOCK_DGRAM bietet Datagramme (verbindungslos, unverlässliche Nachricht einer festen (meist kleinen) maximalen Länge). .TP .B 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. .TP .B SOCK_RAW stellt Zugriff auf interne Netzwerkprotokolle und Schnittstellen zur Verfügung. .TP .B SOCK_RDM bietet eine verlässliche Datagramm-Schicht, die kein Sortieren garantiert. .TP .B SOCK_PACKET ist veraltet und sollte nicht in neuen Programmen benutzt werden. Siehe .BR packet (7). .PP .I 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 auf diese Art angegeben werden. Die Protokollnummer ist individuell für eine bestimmte "Kommunikationsdomain". Siehe dazu auch .BR protocols (5). .PP In .BR getprotoent (3), ist beschrieben, wie Protokoll-Namen in Protokoll-Nummern umgewandelt werden können. .PP Sockets des Typs .B SOCK_STREAM sind voll-duplex-orientierte Byte-Streams, ähnlich wie Pipes. Sie erhalten die Record-Grenzen nicht. Ein Stream-Socket muss sich in einem .IR connected -Modus befinden, bevor mit ihm irgendwelche Daten gesendet oder empfangen werden können. Eine Verbindung zu einem anderen Socket wird mit .BR connect (2) hergestellt. Einmal verbunden können Daten mit .BR read (2) und .BR write (2) übertragen werden bzw. mit Varianten von .BR send (2) oder .BR recv (2). Wenn eine Verbindung abgebaut werden soll, wird .BR close (2) ausgeführt. Out-of-band Daten können, wie in .BR send (2) beschrieben, gesendet und, wie in .BR recv (2) beschrieben, empfangen werden. .PP Die Kommunikationsprotokolle, die verwendet werden, um ein .B 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 (\(qlbroken\(qr) ist. Wenn .B SO_KEEPALIVE für den Socket gesetzt ist, überprüft das Protokoll auf eine protokoll-spezifische Art, ob das andere Ende noch immer existiert. Ein .BR 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. .PP .BR SOCK_SEQPACKET "\-Sockets" benutzen die selben Systemcalls wie .BR SOCK_STREAM "\-Sockets." Der einzige Unterschied besteht darin, dass .BR read (2) nur die angeforderte Menge an Daten zurückliefert und alle restlichen verwirft. Außerdem werden all Nachrichten-Grenzen der eingehenden Datagramme beibehalten. .PP .BR SOCK_DGRAM "\-" und .BR SOCK_RAW "\-Sockets" erlauben das Senden von Datagrammen zu Empfängern, die im .BR send (2) Aufruf genannt werden. Datagramme werden grundsätzlich mit .BR recvfrom (2) empfangen, das das nächste Datagramm zusammen mit der Absenderadresse zurückliefert. .PP .B SOCK_PACKET ist ein veralteter Socket-Typ, um rohe Pakete direkt vom Geräte-Treiber zu empfangen. Benutzen Sie stattdessen .BR packet (7). .PP Ein .BR fcntl (2)-Aufruf kann mit dem .BR F_SETOWN "\-Argument" benutzt werden, um eine Prozessgruppe anzugeben, die ein .BR SIGURG "\-Signal" empfangen soll, wenn out-of-band Daten ankommen, oder ein .BR SIGPIPE "\-Signal," wenn eine .BR 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 .BR SIGIO "\-Signal" erhält. .B F_SETOWN zu benutzen entspricht dem Aufruf der Systemfunktion .BR ioctl (2) mit dem Argument .BR SIOSETOWN .PP Wenn das Netzwerk dem Protokoll-Modul einen Fehler meldet (z. B. durch eine ICMP-Nachricht unter IP), wird der Flag gesetzt, der auf einen unbearbeiteten Fehler (\(lqpending error\(rq) hinweist. Der nächste Funktionsaufruf für diesen Socket liefert den Code des Fehler zurück. Bei manchen Protokollen ist es möglich, eine socket-spezifische Fehlerliste einzuschalten, um genaue Informationen über den Fehler zu erhalten. Siehe .B IP_RECEIVER in .BR ip (7). .PP Die Arbeitsweise von Sockets wird von .RB Socket-Level- Optionen gesteuert. Diese sind in der Include-Datei .I definiert. .BR setsockopt (2) und .BR getsockopt (2) werden verwendet, um diese Optionen zu setzen bzw. zu lesen. .SH BEMERKUNG Die unter BSD 4.* benutzten Konstanten für Protokoll-Familien sind .BR PF_UNIX , .B PF_INET usw., während .B AF_UNIX usw. für Adress-Familien verwandt werden. Allerdings verspricht die BSD Handbuchseite bereits: \(lqDie Protokoll-Familie ist generell das selbe wie die Adress-Familie\(rq und die folgenden Standards benutzen überall .BR AF_* . .SH "RÜCKGABEWERTE" \-1 wird zurückgegeben, wenn ein Fehler auftritt, ansonsten wird die Nummer des Deskriptors zurückgegeben, der den Socket referenziert. .SH FEHLER .TP .B EPROTONOSUPPORT Der Protokolltyp, der in .I protocol angegeben ist, wird nicht von dieser Kommunikationsdomain unterstützt. .TP .B ENFILE Es ist nicht genügend Kernel-Speicher vorhanden, um eine neue Socket-Struktur anzulegen. .TP .B EMFILE Die Datei-Deskriptor-Tabelle des Prozesses ist voll. .TP .B EACCESS Es ist dem Prozess nicht erlaubt, einen Socket von angegebenen Tyo und/oder Protokoll zu erzeugen. .TP .BR ENOBUFS " oder " ENOMEM Es ist nicht ausreichend Speicher verfügbar. Der Socket kann nicht erzeugt werden bis ausreichend Ressourcen freigemacht wurden. .TP .B EINVAL Unbekanntes Protokoll oder Protokoll-Familie nicht verfügbar. .SH "KONFORM ZU" 4.4BSD (die .BR socket "\-Funktion" taucht in BSD 4.2 auf). Generell portable auf/von nicht-BSD-Systemen, die den BSD-Socket-Layer unterstützen (inklusive System-V-Varianten). .SH BUGS .B SOCK_UUCP ist noch nicht implementiert. .SH "SIEHE AUCH" .BR accept (2), .BR bind (2), .BR connect (2), .BR getprotoent (3), .BR getsockname (2), .BR getsockopt (2), .BR ioctl (2), .BR listen (2), .BR read (2), .BR recv (2), .BR select (2), .BR send (2), .BR shutdown (2), .BR socketpair (2), .BR write (2) .PP \(lqAn Introductory 4.3 BSD Interprocess Communication Tutorial\(rq ist in .I UNIX Programmer's Supplementary Documents Volume 1 abgedruckt. .PP \(lqBSD Interprocess Communication Tutorial\(lq ist in .I UNIX Programmer's Supplementary Documents Volume 1 abgedruckt.