Subroutine 'recv'

Zweck

Empfängt Nachrichten von verbundenen Sockets.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/socket.h>
int recv (Socket,
Buffer, Length, Flags)
int  Socket;
void * Buffer;
size_t  Length;
int  Flags;

Beschreibung

Die Subroutine recv empfängt Nachrichten von einem verbundenen Socket. Die Subroutinen recvfrom und recvmsg empfangen Nachrichten von verbundenen und nicht verbundenen Sockets. Sie werden jedoch normalerweise nur für nicht verbundene Sockets verwendet.

Die Subroutine recv gibt die Länge der Nachricht zurück. Wenn eine Nachricht zu lang ist, um in den bereitgestellten Puffer zu passen, werden überschüssige Byte abhängig vom Typ des Sockets, der die Nachricht ausgegeben hat, abgeschnitten.

Wenn am Socket keine Nachrichten verfügbar sind, wartet die Subroutine recv auf den Eingang einer Nachricht, es sei denn, der Socket ist nicht blockiert. Wenn ein Socket nicht blockiert ist, gibt das System einen Fehler zurück.

Verwenden Sie die Subroutine select , um festzustellen, wann weitere Daten eingehen.

Die Socketanwendungen können mit COMPAT_43 kompiliert werden. Dadurch wird die sockadd-Struktur BSD 4.3 kompatibel. Weitere Informationen finden Sie unter socket.h.

Parameter

Element Beschreibung
Socket Gibt den Socketdeskriptor an.
Puffer Gibt eine Adresse an, an die die Nachricht gestellt werden soll.
Länge Gibt die Größe des Parameters Puffer an.
Flags Verweist auf einen Wert, der den Nachrichtenempfang steuert Die Datei /usr/include/sys/socket.h definiert den Parameter Flags . Das Argument zum Empfangen eines Aufrufs wird durch logisches Verknüpfen eines oder mehrerer der folgenden Werte mit OR gebildet:
MG_OOB
Verarbeitet Out-of-band-Daten. Die Bedeutung von Out-of-band-Daten ist protokollabhängig.
MSG_PEEK
Die eingehenden Daten werden angezeigt. Die Daten werden weiterhin als ungelesen behandelt und beim nächsten Aufruf von recv () oder einer ähnlichen Funktion gelesen.
MSG_WAITALLE
Fordert an, dass die Funktion erst zurückgegeben wird, nachdem die angeforderte Anzahl Byte gelesen wurde. Die Funktion kann nur dann weniger als die angeforderte Anzahl Byte zurückgeben, wenn ein Signal abgefangen wird, die Verbindung beendet wird oder ein Fehler für das Socket ansteht.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine recv die Länge der Nachricht in Byte zurück.

Wenn die Subroutine recv nicht erfolgreich ist, führt der Subroutinenhandler die folgenden Funktionen aus:

  • Gibt den Wert -1 an das aufrufende Programm zurück.
  • Gibt 0 zurück, wenn die Verbindung getrennt wird.
  • Verschiebt einen Fehlercode, der den spezifischen Fehler angibt, in die globale Variable errno .

Fehlercodes

Die Subroutine recv ist nicht erfolgreich, wenn einer der folgenden Fehler auftritt:

Fehler Beschreibung
EBADF Der Parameter Socket ist ungültig.
ECONNRESET Der ferne Peer erzwingt das Schließen der Verbindung.
EFAULT Die Daten wurden für den Empfang in einen nicht vorhandenen oder geschützten Teil des Prozessadressraums übertragen. Der Parameter Puffer ist ungültig.
EINTR Ein Signal unterbrach die Subroutine recv , bevor Daten verfügbar waren.
EINVAL Das Flag MSG_OOB ist gesetzt und es sind keine Außerbanddaten verfügbar.
ENOBUF Im System sind nicht genügend Ressourcen verfügbar, um die Operation auszuführen.
ENOTCONN Es wird versucht, einen Empfang über ein SOCK_STREAM -Socket zu empfangen, das nicht verbunden ist.
ENOTSOCK (ENOTSOCK) Der Parameter Socket verweist auf eine Datei, nicht auf ein Socket.
EOPNOTSUPP Das Flag MSG_OOB wird für ein SOCK_DGRAM -Socket oder das Flag MSG_OOB für jedes AF_UNIX -Socket gesetzt.
ETIMEDOUT Das Zeitlimit für die Verbindung wurde während des Verbindungsaufbaus überschritten oder es gab ein Übertragungszeitlimit für eine aktive Verbindung.
EWOULDBLOCK Der Socket wird als nicht blockierend markiert und es sind keine Verbindungen vorhanden, die akzeptiert werden können.