#include <sys.types.h>
#include <sys.socket.h>
#include <sys.uio.h>
Kernighan-Ritchie-C:
int soc_read(s, buf, nbytes);
int s;
char *buf;
int nbytes;
int soc_readv(s, iov, iovcnt);
int s;
struct iovec *iov;
int iovcnt;
ANSI-C:
int soc_read(int s, char* buf, int nbytes);
int soc_readv(int s, struct iovec* iov, int iovcnt)
Beschreibung
Die Funktionen soc_read() und soc_readv() lesen Nachrichten
von einem Stream-Socket s der Adressfamilie AF_INET oder AF_INET6,
von einem Socket s der Adressfamilie AF_ISO.
soc_read() und soc_readv() können nur bei einem Socket verwendet werden, für den eine Verbindung aufgebaut ist.
Bei soc_read() zeigt der Parameter buf auf das erste Byte des Empfangspuffers buf. nbytes spezifiziert die Länge (in Bytes) des Empfangspuffers und damit die maximale Nachrichtenlänge.
Bei soc_readv() werden die empfangenen Daten im Vektor mit den Elementen iov[0], iov[1], ... ,iov[iovcnt-1] abgelegt. Die Vektorelemente sind Objekte vom Typ struct iovec. iovcnt gibt die Anzahl der Vektorelemente an.
Die Struktur iovec ist in <sys.uio.h> wie folgt deklariert:
struct iovec { caddr_t iov_base; /* Puffer für Hilfsdaten */ int iovlen; /* Pufferlänge */ };
Im Parameter iov wird die Adresse des Vektors übergeben. Jedes Vektorelement spezifiziert Adresse und Länge eines Speicherbereichs, in den soc_readv() die vom Socket s empfangenen Daten einliest. soc_readv() füllt einen Bereich nach dem anderen mit Daten, wobei soc_readv() immer erst dann zum nächsten Bereich übergeht, wenn der aktuelle Bereich vollständig mit Daten gefüllt ist.
Returnwert
>=0:
bei Erfolg (Anzahl der empfangenen Bytes)
-1:
bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.
Fehleranzeige durch errno
EBADF
Der Parameter s ist kein gültiger Deskriptor.
EIO
Es sind keine Benutzerdaten zum Lesen vorhanden.
ENETDOWN
Die Verbindung zum Netzwerk ist nicht mehr aktiv.
ENOTCONN
Für den Socket besteht keine Verbindung.
EOPNOTSUPP
Der Socket-Typ wird nicht unterstützt. Der Socket ist nicht vom Typ SOCK_STREAM.
EWOULDBLOCK
Der Socket ist als nicht-blockierend markiert, und die geforderte Operation würde blockieren.
EPIPE
Die Verbindung ist abgebaut.
Siehe auch
connect(), getsockopt(), recv(), select(), send(), soc_ioctl(), soc_read(), soc_write(), soc_writev(), socket()