Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

close(2)

fcntl(2)

ioctl(2)

read(2)

write(2)

accept(3N)

bind(3N)

connect(3N)

getsockname(3N)

getsockopt(3N)

listen(3N)

recv(3N)

send(3N)

shutdown(3N)

socketpair(3N)

netconfig(4)

socket(3N)                                                       socket(3N)

NAME
     socket - Kommunikationsendpunkt erzeugen

SYNTAX
     #include <sys/types.h>
     #include <sys/socket.h>

     int socket(int domain, int type, int protocol);

BESCHREIBUNG
     socket() erzeugt einen Kommunikationsendpunkt und liefert einen
     Deskriptor zurück.

     Der Parameter domain gibt eine Kommunikations-Domäne an, worin die
     Kommunikation stattfindet. Eine Kommunikations-Domäne setzt sich aus
     Adreßfamilien und zugehörigen Protokoll-Familien zusammen. Eine Adreß-
     familie faßt Adressen gleicher Adreß-Struktur zusammen. Eine Proto-
     koll-Familie definiert einen Satz von Protokollen, die die Socket-
     Typen einer Adreßfamilie verwenden können. Derzeit entspricht die Pro-
     tokollfamilie der Adreßfamilie für die Adressen, die bei späteren Ope-
     rationen auf dem Socket verwendet werden. Diese Familien sind in der
     Datei /usr/include/sys/socket.h definiert. Die augenblicklich verwen-
     deten Familien sind:

     PFUNIX             Interne Protokolle des UNIX Systems

     PFINET             ARPA-Internet-Protokolle

     Der Socket hat den angegebenen Typ type, der die Art der Kommunikation
     bezeichnet (verbindungsorientiert oder verbindungslos). Die augen-
     blicklich definierten und von Reliant UNIX unterstützten Typen sind:

          SOCKSTREAM
          SOCKDGRAM
          SOCKRAW

     Ein SOCKSTREAM-Socket bietet gesicherte, bidirektionale und verbin-
     dungsorientierte Byteübertragung in richtiger Reihenfolge. Der "out-
     of-band"-Übertragungsmechanismus kann unterstützt werden. Sockets vom
     Typ SOCKSTREAM sind Vollduplex-Byteströme, die Ähnlichkeit mit Pipes
     haben. Ein Socket-Stream muß verbunden sein, bevor Daten auf ihm
     gesendet oder empfangen werden können. Eine Verbindung zu einem ande-
     ren Socket wird mittels einem connect(3N)-Aufruf aufgebaut. Wenn die
     Verbindung einmal eingerichtet ist, können Daten mittels den Aufrufen
     von read(2) und write(2) oder mittels einiger Varianten der Aufrufe
     von send(3N) und recv(3N) übertragen werden. Wenn eine Sitzung beendet
     ist, kann ein close(2) durchgeführt werden. "Out-of-band"-Daten können
     ebenfalls übertragen [send(3N)] und empfangen [recv(3N)] werden.







Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

socket(3N)                                                       socket(3N)

     Die Kommunikationsprotokolle, die für die Realisierung eines Sockets
     vom Typ SOCKSTREAM verwendet werden, gewährleisten, daß Daten nicht
     verloren gehen oder dupliziert werden. Wenn Daten, für die das Part-
     nerprotokoll Pufferplatz verfügbar hat, innerhalb einer angemessenen
     Zeit nicht erfolgreich übertragen werden können, wird die Verbindung
     als unterbrochen angesehen und die Aufrufe zeigen einen Fehler mit -1
     sowie dem spezifischen Fehlercode in der globalen Variable errno an.

     Diese Protokolle unterstützen wahlweise einen Mechanismus zur Überwa-
     chung von Verbindungen, die lange Zeit inaktiv sind (d.h. bei denen
     lange Zeit kein Datentransfer stattfindet), damit solche Verbindungen
     nach einer bestimmten Zeit abgebaut werden können. So ein Mechanismus
     kann mit der Option SOKEEPALIVE und dem Aufruf setsockopt() für die
     Adreßfamilie AFINET mit dem Protokoll TCP eingeschaltet werden. Ist
     die Verbindung zu lange inaktiv (systemweites Zeitlimit, typischer-
     weise 120 Sekunden), so werden von TCP Nachrichten periodisch (typi-
     scherweise alle 75 Sekunden) an den Partner gesendet. Antwortet der
     Partner nicht nach einer gewissen Anzahl von Wiederholungen, wird
     angenommen, daß er nicht "am Leben" ist, und die Verbindung wird abge-
     baut. Versucht ein Prozeß auf einer abgebrochenen Verbindung zu sen-
     den, erhält er ein Signal SIGPIPE. Ist für SIGPIPE keine Signal-
     Behandlungsroutine definiert, wird der Prozeß beendet.

     Ein SOCKDGRAM-Socket bietet Datagramm-Übertragung (verbindungslose
     und ungesicherte Übertragung von Nachrichten fester Maximalgröße; nor-
     malerweise kleine Nachrichten). SOCKRAW-Sockets bieten den Zugriff
     auf interne Netzwerkschnittstellen an.

     Die Socket-Typen SOCKDGRAM und SOCKRAW ermöglichen das Senden von
     Datagrammen an Partner, die in sendto-Aufrufen direkt angegeben wer-
     den. Datagramme werden mittels recvfrom-Aufrufe empfangen, das das
     nächste Datagramm und eine Quell-Adresse zurückliefert.

     Für jede Protokollfamilie und jeden Typ muß mindestens ein Eintrag in
     der Datei /etc/netconfig [siehe netconfig(4)] existieren.

     protocol spezifiziert ein bestimmtes Protokoll, das für den Socket
     verwendet werden soll. Normalerweise existiert innerhalb einer gegebe-
     nen Protokollfamilie nur ein einziges Protokoll, um einen bestimmten
     Socket-Typ zu unterstützen. Es können jedoch mehrere Protokolle exi-
     stieren, wobei dann ein bestimmtes Protokoll angegeben werden muß. Die
     zu verwendende Protokollnummer ist für jede Kommunikations-Domäne, in
     der die Kommunikation stattfinden soll, eindeutig. Wenn ein Protokoll
     vom Aufrufer angegeben wird, wird es in eine Optionsanforderung auf
     Socket-Ebene verpackt und an die darunterliegende Protokollschicht
     gesendet.

     Wenn protocol angegeben wurde, für das Tupel Familie, Typ, Protokoll
     jedoch in der Datei /etc/netconfig kein passender Eintrag gefunden
     wurde, wird der erste Eintrag verwendet, der die angegebene Familie
     und den Typ mit null für den Protokolleintrag enthält.



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

socket(3N)                                                       socket(3N)

     Mit fcntl(2) kann eine Prozeßgruppe spezifiziert werden, um ein
     SIGURG-Signal empfangen zu können, wenn "out-of-band"-Daten angekommen
     sind. Mit diesem System-Aufruf kann ebenfalls nicht-blockierende E/A
     und asynchrones Melden von E/A-Ereignissen durch SIGIO-Signale akti-
     viert werden.

     Das Verhalten von Sockets wird durch die Optionen der Socket-Ebene
     gesteuert. Diese Optionen sind in der Datei /usr/include/sys/socket.h
     definiert. Mit setsockopt(3N) und getsockopt(3N) können die Optionen
     gesetzt bzw. ermittelt werden.

RÜCKGABEWERT
     Es wird -1 zurückgegeben, wenn ein Fehler auftritt. Andernfalls ist
     der Rückgabewert ein Deskriptor, der auf einen Socket verweist.

DIAGNOSE
     Der socket()-Aufruf schlägt in folgenden Fällen fehl:

     EPROTONOSUPPORT     Der Protokolltyp oder das spezifizierte Protokoll
                         ist innerhalb des Bereichs nicht verfügbar.

     EMFILE              Die Deskriptortabelle für den entsprechenden Pro-
                         zeß ist voll.

     EACCESS             Die Erlaubnis, einen Socket des angegebenen Typs
                         und/oder des angegebenen Protokolls zu erzeugen,
                         wird nicht erteilt.

     ENOMEM              Es ist nicht genügend Speicher verfügbar, um die
                         Operation durchzuführen.

     ENOSR               Es waren nicht genügend STREAMS-Betriebsmittel
                         verfügbar, um die Operation durchzuführen.

SIEHE AUCH
     close(2), fcntl(2), ioctl(2), read(2), write(2), accept(3N), bind(3N),
     connect(3N), getsockname(3N), getsockopt(3N), listen(3N), recv(3N),
     send(3N), shutdown(3N), socketpair(3N), netconfig(4).
















Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026