Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ recv(3N) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fcntl(2)

ioctl(2)

read(2)

select(3C)

connect(3N)

getsockopt(3N)

send(3N)

socket(3N)

recv(3N)                                                           recv(3N)

NAME
     recv, recvfrom, recvmsg - Nachricht von einem Socket empfangen

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

     int recv(int s, char *buf, int len, int flags);

     int recvfrom(int s, char *buf, int len, int flags,
                       struct sockaddr *from, int *fromlen);

     int recvmsg(int s, struct msghdr *msg, int flags);

BESCHREIBUNG
     s ist ein Socket, der mit socket(3N) erzeugt wurde. Mit recv(),
     recvfrom() und recvmsg() können Nachrichten von einem anderen Socket
     empfangen werden. recv() kann nur auf einem verbundenen Socket [siehe
     connect(3N)] verwendet werden. recvfrom() und recvmsg() können hinge-
     gen für den Empfang von Daten auf einem Socket verwendet werden, unab-
     hängig davon, ob er verbunden ist oder nicht.

     Wenn der Zeiger from nicht den Wert NULL hat, wird dort die Sende-
     adresse der Nachricht eingetragen. fromlen gibt die Länge der Adresse
     an und sollte mit der Größe des Puffers from initialisiert werden.
     Zurückgeliefert wird die Länge der Nachricht. Falls eine Nachricht zu
     lang ist, und nicht in den angegebenen Puffer buf paßt, können Bytes,
     abhängig vom Socket-Typ (SOCKSTREAM und SOCKRAW), von dem die Nach-
     richt empfangen wird, verworfen werden [siehe socket(3N)].

     Wenn keine Nachrichten auf dem Socket verfügbar sind, wartet der Pro-
     zeß auf eine ankommende Nachricht, es sei denn, der Typ des Sockets
     ist nichtblockierend [siehe fcntl(2)]. Im letzteren Fall wird eine -1
     zurückgegeben und die externe Variable errno auf EWOULDBLOCK gesetzt.

     Mit dem Aufruf select() kann für den Socket abgefragt werden, ob wei-
     tere Daten angekommen sind.

     Der Parameter flags wird durch eine Oder-Verknüpfung der folgenden
     Werte gebildet.

     MSGOOB         Liest alle "out-of-band"-Daten, die sich auf dem
                     Socket befinden, statt die normalen "in-band"-Daten.

     MSGPEEK        Liest die Daten, die sich auf dem Socket befinden. Die
                     Daten werden zurückgeliefert, aber nicht verarbeitet,
                     so daß nachfolgende Empfangsoperationen die gleichen
                     Daten vorfinden.

     Der Aufruf recvmsg() verwendet zur Vereinfachung eine Struktur msghdr.
     Die Struktur ist in /usr/include/sys/socket.h definiert und enthält
     folgende Komponenten:



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

recv(3N)                                                           recv(3N)

     caddrt        msgname;          /* optionale Adresse */
     int            msgnamelen;       /* Länge der Adresse */
     struct iovec   *msgiov;          /* scatter/gather-Array */
     int            msgiovlen;        /* # Elemente in msgiov */
     caddrt        msgaccrights;     /* empfangene/gesendete
                                          Zugriffsrechte */
     int            msgaccrightslen;

     msgname und msgnamelen geben die Zieladresse an, wenn der Socket
     nicht verbunden ist. msgname kann auf den Wert NULL gesetzt werden,
     wenn keine Adressen erwünscht bzw. erforderlich sind. msgiov und
     msgiovlen spezifizieren den Scatter-Gather-Bereich, wie in read(2)
     beschrieben ist. Um alle Zugriffsrechte zu empfangen, die zusammen mit
     der Nachricht gesendet werden, ist in msgaccrights ein Puffer angege-
     ben, der die Länge msgaccrightslen besitzt. Der Empfang von Zugriffs-
     rechten wird nicht von allen Protokoll-Familien unterstützt.

RÜCKGABEWERT
     Die Aufrufe liefern die Anzahl empfangener Bytes zurück oder -1, falls
     ein Fehler aufgetreten ist.

DIAGNOSE
     Die Aufrufe scheitern in folgenden Fällen:

     EBADF           s ist ein ungültiger Deskriptor.

     ENOTSOCK        s verweist nicht auf einen Socket.

     EINTR           Die Operation wurde durch den Empfang eines Signals
                     unterbrochen, bevor Daten für den Empfang verfügbar
                     waren.

     EWOULDBLOCK     Der Socket ist als nichtblockierend markiert, und die
                     gewünschte Operation würde blockieren.

     ENOMEM          Es war nicht genügend Speicher verfügbar, um die Ope-
                     ration durchzuführen.

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

SIEHE AUCH
     fcntl(2), ioctl(2), read(2), select(3C), connect(3N), getsockopt(3N),
     send(3N), socket(3N).










Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

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