Subroutine 'recv'
Zweck
Empfängt Nachrichten von verbundenen Sockets.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
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:
|
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. |