sendto-Subroutine

Zweck

Sendet Nachrichten über ein Socket.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/socket.h>
int sendto
(Socket, Message, Length,
Flags, To, ToLength)
int  Socket;
const void * Message;
size_t  Length;
int  Flags;
const struct sockaddr * To;
socklen_t  ToLength;

Beschreibung

Die Subroutine Sendto ermöglicht einem Anwendungsprogramm, Nachrichten über ein nicht verbundenes Socket zu senden, indem eine Zieladresse angegeben wird.

Zum Broadcastbetrieb an einem Socket setzen Sie zuerst eine Setsockopt -Subroutine ab, die die Option SO_BROADCAST verwendet, um Broadcastberechtigungen zu erhalten.

Geben Sie die Adresse des Ziels mit dem Parameter Bis an. Geben Sie die Länge der Nachricht mit dem Parameter Länge an. Wenn die Nachricht zu lang ist, um das zugrunde liegende Protokoll zu durchlaufen, wird der Fehler EMSGGRÖßE zurückgegeben und die Nachricht wird nicht übertragen.

Wenn der Senden -Socket keinen Speicherplatz für die zu übertragende Nachricht hat, blockiert die Subroutine Sendto die Nachricht, sofern sich der Socket nicht in einem nicht blockierenden E/A-Modus befindet.

Verwenden Sie die Subroutine Auswählen , um festzustellen, wann es möglich ist, weitere Daten zu senden.

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

Parameter

Element Beschreibung
Socket Gibt den eindeutigen Namen für den Socket an
Nachricht Gibt die Adresse an, die die zu sendende Nachricht enthält.
Länge Gibt die Größe der Nachricht in Byte an.
Flags Ermöglicht dem Absender die Steuerung der Nachrichtenübertragung. Der Parameter Flaggen , der zum Senden eines Aufrufs verwendet wird, wird durch logisches Verknüpfen eines oder beider der folgenden Werte mit OR gebildet:
MG_OOB
Verarbeitet Außerbanddaten auf Sockets, die SOCK_DATENSTROMunterstützen.
Hinweis:
MSG_NICHT_WEITERLEITEN
Sendet ohne Verwendung von Routing-Tabellen.

Die Datei /usr/include/sys/socket.h definiert den Parameter Flags .

to Gibt die Zieladresse für die Nachricht an Die Zieladresse ist eine sockaddr -Struktur, die in der Datei /usr/include/sys/socket.h definiert ist.
ToLength Gibt die Größe der Zieladresse an.

Rückgabewerte

Nach erfolgreicher Ausführung gibt die Subroutine Sendto die Anzahl der gesendeten Zeichen zurück.

Wenn das Unterprogramm sendto nicht erfolgreich ist, gibt das System den Wert -1 zurück, und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.

Fehlercodes

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

Fehler Beschreibung
EACCES Der Schreibzugriff auf den benannten Socket wird verweigert oder der Socket, der versucht, ein Broadcastpaket zu senden, hat keine 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 dieses 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 es ist keine Peeradresse festgelegt.
EFAULT Der Parameter Adresse befindet sich nicht in einem beschreibbaren Teil des Benutzeradressraums.
EHOSTUNREACH Der Zielhost kann nicht erreicht werden.
EINTR Ein Signal hat Sendto unterbrochen, bevor Daten übertragen wurden.
EINVAL Der Parameter Länge oder ToLength ist ungültig.
EISVerbindung (EISCONN) Ein SOCK_DGRAM -Socket ist bereits verbunden.
EMSGGRÖßE Die Nachricht ist zu groß, um auf einmal gesendet zu werden, wie es der Socket erfordert.
ENETUNREACH Das Zielnetz ist nicht erreichbar.
ENOBUFS Das System hat keinen Speicher mehr für eine interne Datenstruktur.
ENOENT Der Pfadname gibt keine vorhandene Datei an oder der Pfadname ist eine leere Zeichenfolge.
ENOMEM Der verfügbare Datenspeicherbereich im Speicher ist nicht groß genug, um Gruppen-/ACL-Informationen aufzunehmen.
ENOPROTOOPT (ENOPROTOOPT) Das Protokoll wird nicht unterstützt (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 Socketargument ist einem Socket zugeordnet, der mindestens einen in Flaggenfestgelegten 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 dieser Seite der Verbindung beendet. Wenn das Socket den Typ SOCK_DATENSTROMhat, wird das Signal SIGPIPE an den aufrufende Prozess generiert.
EWOULDBLOCK Der Socket wird als nicht blockierend markiert und es sind keine Verbindungen vorhanden, die akzeptiert werden können.