recv(3N-xs) (X/OPEN SOCKETS) recv(3N-xs)
NAME
recv - Eine Meldung von einem verbundenen Socket empfangen
SYNTAX
cc [flag ...] file ... -lxnet [library ...]
#include <sys/socket.h>
ssizet recv(int socket, void *buffer,
sizet length, int flags);
BESCHREIBUNG
Die Funktion recv empfängt Meldungen von einem verbundenen Socket. Für
die Funktion können folgende Argumente angegeben werden:
socket Gibt den Dateideskriptor für den Socket an.
buffer Zeigt auf einen Puffer, in dem die Meldung gespeichert
werden 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 recv 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.
Die Funktion recv 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 Puffer, und ist MSGPEEK
im Argument flags nicht gesetzt, werden die über die Puffergröße
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
recv(3N-xs) (X/OPEN SOCKETS) recv(3N-xs)
hinausgehenden Byte gelöscht. Bei Sockets auf STREAM-Basis, wie bei-
spielsweise 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 recv den Prozeß so
lange, bis eine Meldung eingeht. Wenn am Socket keine Meldungen ver-
fügbar sind und ONONBLOCK im Dateideskriptor des Sockets gesetzt ist,
schlägt recv fehl und setzt errno auf EWOULDBLOCK oder EAGAIN.
RÜCKGABEWERT
Bei erfolgreicher Ausführung gibt recv die Länge der Meldung in Byte
zurück. Wenn keine zu empfangenden Meldungen vorliegen und der Peer
ordnungsgemäß heruntergefahren wurde, gibt recv 0 zurück. Andernfalls
wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.
FEHLER
Die Funktion recv schlägt fehl, wenn eine der folgenden Bedingungen
zutrifft:
EBADF Das Argument socket ist kein gültiger Dateideskriptor.
ECONNRESET Eine Verbindung wurde durch einen Peer geschlossen.
EINTR Die Funktion recv wurde durch ein Signal unterbrochen,
bevor Daten verfügbar waren.
EINVAL Das Flag MSGOOB ist gesetzt, und keine Out-of-Band-
Daten sind verfügbar.
ENOTCONN Es wurde versucht, Daten auf einem verbindungsorien-
tierten 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
bzw. dieses Socket-Protokoll 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
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
recv(3N-xs) (X/OPEN SOCKETS) recv(3N-xs)
der Socket unterstützt kein Blockieren, um auf Out-
of-Band-Daten zu warten.
Die Funktion recv kann fehlschlagen, wenn eine der folgenden Bedingun-
gen 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.
ANWENDUNGSZWECK
Die Funktion recv entspricht der Funktion recvfrom mit Null als Argu-
ment addresslen und der Funktion read, wenn keine Flags verwendet
werden.
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), recvmsg(3N-xs),
recvfrom(3N-xs), send(3N-xs), sendmsg(3N-xs), sendto(3N-xs),
shutdown(3N-xs), socket(3N-xs).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98