recvmsg(3N-xs) (X/OPEN SOCKETS) recvmsg(3N-xs)
NAME
recvmsg - Eine Meldung von einem Socket empfangen
SYNTAX
cc [flag ...] file ... -lxnet [library ...]
#include <sys/socket.h>
ssizet recvmsg(int socket, struct msghdr *message, int flags);
BESCHREIBUNG
Die Funktion recvmsg empfängt eine Meldung von einem verbindungs-
orientierten Socket oder einem nicht verbundenen Socket. Sie wird nor-
malerweise mit Sockets ohne Verbindung verwendet, da sie der Anwendung
erlaubt, die Quelladresse der empfangenen Daten abzurufen.
Für die Funktion können folgende Argumente angegeben werden:
socket Gibt den Dateideskriptor des Sockets an.
message Zeigt auf eine msghdr-Struktur, die sowohl den Puffer zum
Speichern der Quelladresse als auch die Puffer für einge-
hende Meldungen enthält. Länge und Format der Adresse
sind von der Adreßfamilie des Sockets abhängig. Die Kom-
ponente msgflags wird bei der Eingabe zwar ignoriert,
kann bei der Ausgabe jedoch Werte von Bedeutung enthal-
ten.
flags Gibt die Art des Meldungsempfangs an. Die Werte dieses
Arguments werden durch logisches Verbinden der folgenden
Werte über OR gebildet (es kann auch kein Wert angegeben
werden):
MSGOOB
Fordert Out-of-Band-Daten an. Bedeutung und Semantik
von Out-of-Band-Daten sind protokollspezifisch.
MSGPEEK
Zeigt die eingehende Meldung an.
MSGWAITALL
Fordert an, daß die Funktion so lange blockiert
wird, bis die gesamte angeforderte Datenmenge
zurückgegeben werden kann. Die Funktion kann eine
geringere Datenmenge zurückgeben, wenn ein Signal
aufgefangen wird, die Verbindung beendet wird, oder
ein Fehler für den Socket ansteht.
Die Funktion recvmsg empfängt Meldungen von nicht verbundenen und ver-
bundenen Sockets und gibt die Länge der Meldung zurück.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
recvmsg(3N-xs) (X/OPEN SOCKETS) recvmsg(3N-xs)
Die Funktion recvmsg gibt die Gesamtlänge der Meldung zurück. Bei
Sockets auf Meldungsbasis wie beispielsweise SOCKDGRAM und
SOCKSEQPACKET muß die gesamte Meldung in einer einzigen Operation
gelesen werden. Ist eine Meldung zu lang für die angegebenen Puffer,
und ist MSGPEEK im Argument flags nicht gesetzt, werden die über die
Puffergröße hinausgehenden Byte gelöscht, und in der Komponente
msgflags der msghdr-Struktur wird MSGTRUNC gesetzt. Bei Sockets auf
STREAM-Basis, wie beispielsweise SOCKSTREAM, werden Meldungsgrenzen
ignoriert. In diesem Fall werden die Daten an den Benutzer ausgegeben,
sobald sie verfügbar sind, und es werden keine Daten gelöscht.
Wenn das Flag MSGWAITALL nicht gesetzt ist, werden nur Daten bis zum
Ende der ersten Meldung ausgegeben.
Wenn am Socket keine Meldungen verfügbar sind und ONONBLOCK im Datei-
deskriptor des Sockets nicht gesetzt ist, blockiert recvmsg so lange,
bis eine Meldung eingeht. Wenn am Socket keine Meldungen verfügbar
sind und ONONBLOCK im Dateideskriptor des Sockets gesetzt ist,
schlägt recvmsg fehl und setzt errno auf EWOULDBLOCK oder EAGAIN.
In der msghdr-Struktur geben die Komponenten msgname und msgnamelen
die Quelladresse an, wenn der Socket nicht verbunden ist. Ist der
Socket verbunden, werden die Komponenten msgname und msgnamelen
ignoriert. Die Komponente msgname kann ein Null-Zeiger sein, wenn
keine Namen gewünscht oder benötigt werden. Die Komponenten msgiov
und msgiovlen beschreiben die Scatter-/Gather-Bereiche.
Bei erfolgreicher Ausführung enthält die Komponente msgflags des Mel-
dungskopfes alle der folgenden Flags, die Bedingungen für die empfan-
gene Meldung anzeigen. Die Flags sind bitweise über ein logisches OR
verknüpft.
MSGEOR Das Satzende wurde erreicht (falls vom Protokoll
unterstützt).
MSGOOB Out-of-Band-Daten wurden empfangen.
MSGTRUNC Normale Daten wurden abgeschnitten.
MSGCTRUNC Steuerdaten wurden abgeschnitten.
RÜCKGABEWERT
Bei erfolgreicher Ausführung gibt recvmsg die Länge der Meldung in
Byte zurück. Wenn keine zu empfangenden Meldungen verfügbar sind und
der Peer ordnungsgemäß heruntergefahren wurde, gibt recvmsg 0 zurück.
Andernfalls wird -1 zurückgegeben und errno gesetzt, um den Fehler
anzuzeigen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
recvmsg(3N-xs) (X/OPEN SOCKETS) recvmsg(3N-xs)
FEHLER
Die Funktion recvmsg schlägt fehl, wenn eine der folgenden Bedingungen
zutrifft:
EBADF Das Argument socket ist kein gültiger Dateideskriptor.
ENOTSOCK Das Argument socket verweist nicht auf einen Socket.
EINVAL Die Summe der Werte für iovlen überschreitet ssizet.
EWOULDBLOCK oder EAGAIN
Der Dateideskriptor des Sockets ist als ONONBLOCK
markiert, und es stehen keine Daten für den Empfang
an; oder MSGOOB ist gesetzt, und es sind keine Out-
of-Band-Daten verfügbar, und entweder der Dateide-
skriptor des Sockets ist als ONONBLOCK markiert, oder
der Socket unterstützt kein Blockieren, um auf Out-
of-Band-Daten zu warten.
EINTR Die Funktion wurde durch ein Signal unterbrochen,
bevor Daten verfügbar waren.
EOPNOTSUPP Die angegebenen Flags werden für diesen Socket-Typ
nicht unterstützt.
ENOTCONN Es wurde versucht, Daten auf einem verbindungs-
orientierten Socket zu empfangen, der nicht verbunden
ist.
ETIMEDOUT Die für die Verbindung verfügbare Zeit ist während des
Verbindungsaufbaus abgelaufen, oder bei einer aktiven
Verbindung wurde die Übertragungszeit überschritten.
EINVAL Das Flag MSGOOB ist gesetzt und keine Out-of-Band-
Daten sind verfügbar.
ECONNRESET Eine Verbindung wurde von einem Peer geschlossen.
Die Funktion recvmsg kann fehlschlagen, wenn eine der folgenden Bedin-
gungen zutrifft:
EINVAL Die Komponente msgiovlen der msghdr-Struktur, auf die
msg zeigt, ist kleiner oder gleich 0 oder größer als
{IOVMAX}.
EIO Beim Lesen aus dem oder Schreiben in das Dateisystem
ist ein E/A-Fehler aufgetreten.
ENOBUFS Die im System verfügbaren Ressourcen reichen für die
Ausführung der Operation nicht aus.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
recvmsg(3N-xs) (X/OPEN SOCKETS) recvmsg(3N-xs)
ENOMEM Der verfügbare Speicher reicht für die Anforderung
nicht aus.
ENOSR Die verfügbaren STREAMS-Ressourcen reichen für die
Ausführung der Operation nicht aus.
ANWENDUNGSZWECK
Die Funktionen select und poll können verwendet werden, um festzustel-
len, wann Daten für den Empfang vorliegen.
SIEHE AUCH
poll(2), select(3C), recv(3N-xs), recvfrom(3N-xs), send(3N-xs),
sendmsg(3N-xs), sendto(3N-xs), shutdown(3N-xs), socket(3N-xs).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98