Subroutine senden
Zweck
Sendet Nachrichten von einem verbundenen Socket.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
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:
|
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. |