Hauptindex | Abschnitt 2 | English | 日本語 | Optionen |
int socket(int domain, int type, int protocol);
Der Parameter 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 <sys/socket.h> definiert.
Zur Zeit werden folgende Domains unterstützt:
Name Zweck Handbuchseite Lokale Kommunikation IPv4 Internet-Protokoll IPv6 Internet-Protokoll IPX - Novell-Protokoll Kernel User Interface Device ITU-T X.25 / ISO-8208-Protokoll Amateur-Radio AX.25-Protokoll Zugriff auf raw ATM PVCs Appletalk Low-Level Packet-Interface
Der Socket hat den in type angegebenen Typ, der die Art der Kommunikation bestimmt. Zur Zeit sind folgende Arten definiert:
SOCK_STREAM | |
stellt einen sequenziellen, verlässlichen, zwei-wege, verbindungsbasierten Byte-Stream 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 Packet 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). | |
In getprotoent(3) [Englisch], ist beschrieben, wie Protokoll-Namen in Protokoll-Nummern umgewandelt werden können.
Sockets des Typs SOCK_STREAM sind voll-duplex-orientierte Byte-Streams, ähnlich wie Pipes. Sie erhalten die Record-Grnezen nicht. Ein Stream-Socket muß 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) [Englisch] oder recv(2) [Englisch]. Wenn eine Verbindung abgebaut werden soll, wird close(2) ausgeführt. Out-of-band Daten können, wie in send(2) [Englisch] beschrieben, gesendet und, wie in recv(2) [Englisch] 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 unterbrochen ("lbroken"r) ist. Wenn 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 SIGPIPE-Signal wird erzeugt, wenn ein Prozeß versucht, auf einem kaputten Stream zu senden oder zu empfangen. Dies beendet Prozesse, die das Signal nicht verarbeiten.
SOCK_SEQPACKET-Sockets benutzen die selben Systemcalls wie SOCK_STREAM-Sockets. Der einzige Unterschied besteht darin, daß read(2) nur die angeforderte Menge an Daten zurückliefert und alle restlichen verwirft. Außerdem werden all Nachrichten-Grenzen der eingehenden Datagramme beibehalten.
SOCK_DGRAM- und SOCK_RAW-Sockets erlauben das Senden von Datagrammen zu Empfängern, die im send(2) [Englisch] Aufruf genannt werden. Datagramme werden grundsätzlich mit recvfrom(2) [Englisch] 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äte-Treiber 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 Protokoll-Modul 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 Fehler 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) [Englisch] und getsockopt(2) [Englisch] werden verwendet, um diese Optionen zu setzen bzw. zu lesen.
EPROTONOSUPPORT | |
Der Protokolltyp, der in protocol angegeben ist, wird nicht von dieser Kommunikationsdomain unterstützt. | |
ENFILE | Es ist nicht genügend Kernel-Speicher vorhanden, um eine neue Socket-Struktur anzulegen. |
EMFILE | Die Datei-Deskriptor-Tabelle des Prozesses ist voll. |
EACCESS | |
Es ist dem Prozess nicht erlaubt, einen Socket von angegebenen Tyo und/oder Protokoll zu erzeugen. | |
ENOBUFS oder ENOMEM | |
Es ist nicht ausreichend Speicher verfügbar. Der Socket kann nicht erzeugt werden bis ausreichend Resourcen freigemacht wurden. | |
EINVAL |
Unbekanntes Protokoll oder Protokoll-Familie nicht verfügbar.
|
“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.
2. Mai 2000 | SOCKET (2) | Linux |
Hauptindex | Abschnitt 2 | English | 日本語 | Optionen |
Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.
“ | I define UNIX as “30 definitions of regular expressions living under one roof.” | ” |
— Donald Knuth |