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.