recvfrom(3N-xs) (X/OPEN SOCKETS) recvfrom(3N-xs)
NAME
recvfrom - Eine Meldung von einem Socket empfangen
SYNTAX
cc [flag ...] file ... -lxnet [library ...]
#include <sys/socket.h>
ssizet recvfrom(int socket, void *buffer, sizet length,
int flags, struct sockaddr *address, sizet *addresslen);
BESCHREIBUNG
Die Funktion recvfrom 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.
buffer Zeigt auf den Puffer, in dem die Meldung gespeichert wer-
den soll.
length Gibt die Länge des Puffers (in Byte) an, auf den das
Argument buffer zeigt.
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):
MSGPEEK
Zeigt eine eingehende Meldung an. Die Daten werden
jedoch als ungelesen behandelt und die nächste Funk-
tion recvfrom oder eine ähnliche Funktion gibt diese
Daten auch weiterhin zurück.
MSGOOB
Fordert Out-of-Band-Daten an. Bedeutung und Semantik
von Out-of-Band-Daten sind protokollspezifisch.
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.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
recvfrom(3N-xs) (X/OPEN SOCKETS) recvfrom(3N-xs)
address Ein Null-Zeiger oder ein Zeiger auf eine sockaddr-
Struktur, in der die Sendeadresse gespeichert werden
soll. Länge und Format der Adresse sind von der Adreßfa-
milie des Sockets abhängig.
addresslen Gibt die Länge der sockaddr-Struktur an, auf die das
Argument address zeigt.
Die Funktion recvfrom gibt die Länge der Meldung zurück, die in den
durch das Argument buffer angegebenen Puffer geschrieben wird. 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 den entsprechenden Puf-
fer, und ist MSGPEEK im Argument flags nicht gesetzt, werden die über
die Puffergröße hinausgehenden Byte gelöscht. Bei Sockets auf STREAM-
Basis, wie beispielsweise SOCKSTREAM, werden Meldungsgrenzen igno-
riert. 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.
Nicht alle Protokolle stellen die Quelladresse für Meldungen zur Ver-
fügung. Ist das Argument address kein Null-Zeiger und stellt das Pro-
tokoll die Quelldaresse der Meldungen zur Verfügung, wird die Quella-
dresse der empfangenen Meldung in der sockaddr-Struktur gespeichert,
auf die das Argument address zeigt, und die Länge dieser Adresse in
dem Objekt gespeichert, auf das das Argument addresslen zeigt.
Überschreitet die tatsächliche Länge der Adresse die Länge der angege-
benen sockaddr-Struktur, wird die gespeicherte Adresse abgeschnitten.
Ist das Argument address kein Null-Zeiger und stellt das Protokoll
keine Quelladressen der Meldungen zur Verfügung, wird der in dem
Objekt gespeicherte Wert, auf das address zeigt, nicht näher spezifi-
ziert.
Wenn am Socket keine Meldungen verfügbar sind und ONONBLOCK im Datei-
deskriptor des Sockets nicht gesetzt ist, blockiert recvfrom den Pro-
zeß so lange, bis eine Meldung eingeht. Wenn am Socket keine Meldungen
verfügbar sind und ONONBLOCK im Dateideskriptor des Sockets gesetzt
ist, schlägt recvfrom fehl und setzt errno auf EWOULDBLOCK oder
EAGAIN.
RÜCKGABEWERT
Bei erfolgreicher Ausführung gibt recvfrom die Länge der Meldung in
Byte zurück. Wenn keine zu empfangenden Meldungen verfügbar sind und
der Peer ordnungsgemäß heruntergefahren wurde, gibt recvfrom 0 zurück.
Andernfalls wird -1 zurückgegeben und errno gesetzt, um den Fehler
anzuzeigen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
recvfrom(3N-xs) (X/OPEN SOCKETS) recvfrom(3N-xs)
FEHLER
Die Funktion recvfrom schlägt fehl, wenn eine der folgenden Bedingun-
gen zutrifft:
EBADF Das Argument socket ist kein gültiger Dateideskriptor.
ECONNRESET Eine Verbindung wurde durch einen Peer geschlossen.
EINTR Die Funktion recvfrom wurde durch ein Signal unterbro-
chen, bevor Daten verfügbar waren.
EINVAL Das Flag MSGOOB ist gesetzt und keine Out-of-Band-
Daten sind verfügbar.
ENOTCONN Es wird versucht, Daten auf einem verbindungs-
orientierten Socket zu empfangen, der nicht verbunden
ist.
ENOTSOCK Das Argument socket verweist nicht auf einen Socket.
EOPNOTSUPP Die angegebenen Flags werden für diesen Socket-Typ
nicht unterstützt.
ETIMEDOUT Die für die Verbindung verfügbare Zeit ist während des
Verbindungsaufbaus abgelaufen, oder bei einer aktiven
Verbindung wurde die Übertragungszeit überschritten.
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.
Die Funktion recvfrom kann fehlschlagen, wenn eine der folgenden
Bedingungen zutrifft:
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.
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.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
recvfrom(3N-xs) (X/OPEN SOCKETS) recvfrom(3N-xs)
ANWENDUNGSZWECK
Die Funktionen select und poll können verwendet werden, um festzustel-
len, wann Daten für den Empfang vorliegen.
SIEHE AUCH
poll(2), read(2), write(2), select(3C), recv(3N-xs), recvmsg(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