sendmmsg, Subroutine
Zweck
Sendet mehrere Nachrichten von einem Socket mithilfe einer Nachrichtenstruktur.
Syntax
#include <sys/types.h>
#include <sys/socketvar.h>
#include <sys/socket.h>
int sendmmsg (Socket, Messages, Flags)
int Socket;
struct mmsghdr Message [];
int Flags;
Beschreibung
Die Subroutine sendmmsg sendet Nachrichten über die verbundenen oder nicht verbundenen Sockets unter Verwendung der mmsghdr -Nachrichtenstruktur. Die Datei /usr/include/sys/socket.h enthält die mmsghdr -Nachrichtenstruktur und definiert die Strukturmember. Diese Subroutine ist eine Erweiterung der Subroutine sendmsg .
Parameter
- Socket
- Gibt den Socketdeskriptor an.
- Nachrichten
- Verweist auf ein Array von
mmsghdr-Nachrichtenstrukturen, die die zu sendenden Nachrichten enthalten. - Flags
- Ermöglicht dem Absender die Steuerung der Nachrichtenübertragung. Der Parameter Flags , der zum Senden eines Aufrufs verwendet wird, wird durch logisches Verknüpfen der Flagwerte mit OR gebildet. Die Subroutine sendmmsg akzeptiert dieselben Flagwerte wie die Subroutine sendmsg . Die Datei sys/socket.h enthält den Parameter Flags .
Rückgabewerte
Nach erfolgreicher Beendigung gibt die Subroutine sendmmsg die Anzahl der gesendeten Nachrichten zurück.
Die Subroutine sendmmsg aktualisiert das Attribut msg_len jeder mmsghdr -Struktur, um die Anzahl der Bytes anzugeben, die von der entsprechenden Nachricht gesendet werden.
Wenn die Subroutine sendmmsg nicht erfolgreich ist, führt der Systemhandler die folgenden Funktionen aus:
- Gibt einen Wert von -1 an das aufrufende Programm zurück.
- Verschiebt einen Fehlercode, der den spezifischen Fehler angibt, in die globale Variable Fehlernummer .
Fehlercodes
Die Subroutine sendmmsg ist nicht erfolgreich, wenn einer der folgenden Fehler auftritt:
| Fehler | Beschreibung |
|---|---|
| EACCES | Der Schreibzugriff auf das benannte Socket wird verweigert oder der Socket, der versucht, ein Broadcastpaket zu senden, verfügt nicht über die Broadcastfunktionalität. |
| EADDRNOTAVAIL | Die angegebene Adresse ist keine gültige Adresse. |
| EAFNOUNTERSTÜTZUNG | Die angegebene Adresse ist keine gültige Adresse für die Adressfamilie des Sockets. |
| EBADF | Der Parameter Socket ist ungültig. |
| ECONNRESET | Das Schließen einer Verbindung wurde von einem Peer erzwungen. |
| EDESTADDRREQ | Der Socket befindet sich nicht im Verbindungsmodus und hat keine definierte Peeradresse. |
| EFAULT | Der Parameter Address befindet sich nicht in einem beschreibbaren Teil des Benutzeradressraums. |
| EHOSTUNREACH | Der Zielhost kann nicht erreicht werden. |
| EINTR | Ein Signal unterbrach die Subroutine sendmmsg , bevor Daten übertragen wurden. |
| EINVAL | Die Länge der msghdr -Struktur ist ungültig. |
| EISVerbindung (EISCONN) | Das SOCK_DGRAM -Socket ist bereits verbunden. |
| EMSGGRÖßE | Die Nachricht ist zu groß, um zusammen gesendet zu werden (gemäß Socketanforderung), oder das msg_iovlen -Member der msghdr -Struktur, auf die der Parameter Messages verweist, ist kleiner-gleich 0 oder größer als der Wert IOV_MAX . |
| ENOENT | Der Pfadname verweist nicht auf eine vorhandene Datei oder der Pfadname ist eine leere Zeichenfolge. |
| ENETUNREACH | Das Zielnetz ist nicht erreichbar. |
| ENOBUFS | Das System hat keinen Speicher mehr für eine interne Datenstruktur. |
| ENOMEM | Der verfügbare Datenspeicherbereich im Speicher ist nicht groß genug, um Gruppeninformationen oder Zugriffssteuerungslisteninformationen (ACL) aufzunehmen. |
| ENOPROTOOPT (ENOPROTOOPT) | Das Protokoll unterstützt keine 64 Bit. |
| ENOTCONN | Der Socket befindet sich im Verbindungsmodus, ist aber nicht verbunden. |
| ENOTSOCK (ENOTSOCK) | Der Parameter Socket verweist auf eine Datei, nicht auf einen Socket. |
| EOPNOTSUPP | Das Argument Socket ist einem Socket zugeordnet, der mindestens einen im Parameter Flags festgelegten Wert nicht unterstützt. |
| EPIPE | Es wurde versucht, an ein Socket zu senden, das verbunden war, aber die Verbindung wurde entweder vom fernen Peer oder von der Socketseite der Verbindung beendet. Wenn das Socket den Typ SOCK_DATENSTROMhat, wird das Signal SIGPIPE an den aufrufende Prozess generiert. |
| EWOULDBLOCK | Das Socket ist als nonblockingmarkiert und es sind keine Verbindungen vorhanden, die akzeptiert werden können. |