Subroutine senden

Zweck

Sendet Nachrichten von einem verbundenen Socket.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/types.h>
#include <sys/socketvar.h>
#include <sys/socket.h>
int send (Socket,
Message, Length, Flags)
int  Socket;
const void * Message;
size_t  Length;
int  Flags;

Beschreibung

Die Subroutine Senden sendet nur dann eine Nachricht, wenn das Socket verbunden ist. Diese Subroutine an einem Socket ist nicht threadsicher. Die Subroutinen Sendto und Sendmsg können mit nicht verbundenen oder verbundenen Sockets verwendet werden.

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 Länge der Nachricht mit dem Parameter Länge an. Wenn die Nachricht zu lang ist, um das zugrunde liegende Protokoll zu durchlaufen, gibt das System einen Fehler zurück und überträgt die Nachricht nicht.

In einer Senden -Subroutine wird kein Hinweis auf eine fehlgeschlagene Übergabe impliziert. Ein Rückgabewert von -1 weist auf einige lokal erkannte Fehler hin.

Wenn am sendenden Socket kein Speicherplatz für Nachrichten verfügbar ist, um die zu übertragende Nachricht aufzunehmen, blockiert die Subroutine Senden , sofern sich das 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 Verweist auf die Adresse der zu sendenden Nachricht.
Länge Gibt die Länge der Nachricht in Byte an.
Flags Ermöglicht dem Absender, die Übertragung der Nachricht zu steuern. Der Parameter Flaggen , der zum Senden eines Aufrufs verwendet wird, wird durch logisches Verknüpfen eines oder beider Werte, die in der folgenden Liste aufgeführt sind, mit OR gebildet:
MG_OOB
Verarbeitet Außerbanddaten an Sockets, die die SOCK_DATENSTROM -Kommunikation unterstützen.
MSG_NICHT_WEITERLEITEN
Sendet ohne Verwendung von Routing-Tabellen.
MSG_MPEG2
Gibt an, dass dieser Block ein MPEG2 -Block ist. Dieses Flag ist nur für SOCK_CONN_DGRAM -Sockets gültig.

Rückgabewerte

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

Wenn die Subroutine Senden nicht erfolgreich ist, führt der Subroutinenhandler folgende Funktionen aus:

  • Gibt den Wert -1 an das aufrufende Programm zurück.
  • Verschiebt einen Fehlercode, der den spezifischen Fehler angibt, in die globale Variable Fehlernummer .

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 Senden unterbrochen, bevor Daten übertragen wurden.
EINVAL Der Parameter Länge 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 Im System waren nicht genügend Ressourcen verfügbar, um die Operation auszuführen.
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.
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.