Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

send(), sendto() - Nachricht von Socket zu Socket senden

&pagelevel(4)&pagelevel



#include <sys.types.h>
#include <sys.socket.h>

#include <netinet.in.h> /* AF_INET, AF_INET6 bei verbindungslosem Betrieb */
   
Kernighan-Ritchie-C:
int send(s, msg, len, flags);

int s;
char *msg;
int len, flags;
  

int sendto(s, msg, len, flags, to, tolen);

int s;
char *msg;
int len, flags;

struct sockaddr_in *to;  /* AF_INET  */
struct sockaddr_in6 *to; /* AF_INET6 */
int tolen;

ANSI-C:
int send(int s, char* msg, int len, int flags);
int sendto(int s, char* msg, int len, int flags, struct sockaddr* to, int tolen);


Beschreibung

Die Funktionen send(), sendto() senden Nachrichten von einem Socket an einen anderen Socket. send() kann nur bei einem Socket benutzt werden, über den eine Verbindung mit connect() aufgebaut wurde (siehe Funktion connect() im Abschnitt "connect() - Verbindung über einen Socket initiieren").

sendto() kann auch im verbindungslosen Betrieb verwendet werden. Der Funktionsaufruf von sendto() mit to î Null-Zeiger und tolen î 0 wird nur für Datagramme unterstützt.

Der Parameter s bezeichnet den Socket, von dem eine Nachricht gesendet wird. Die Zieladresse wird mit to übergeben, wobei tolen die Größe der Zieladresse angibt.

Die Länge der Nachricht wird mit len angegeben. Wenn die Nachricht zu lang ist, um von der darunter liegenden Protokollebene vollständig transportiert zu werden, wird bei Datagramm-Sockets (d.h. nur AF_INET und AF_INET6) der Fehler EMSGSIZE geliefert und die Nachricht wird nicht gesendet.

Der Parameter flags wird derzeit nicht unterstützt und sollte mit dem Wert 0 versorgt werden. Ein Wert ungleich 0 führt zu einem Fehler, wobei die Variable errno auf den Wert EOPNOTSUPP gesetzt wird.

Wenn die Nachricht nicht sofort gesendet werden kann, blockiert send(), sofern der Socket nicht in den nicht-blockierenden Ein-/Ausgabemodus gesetzt wurde. Mit der Funktion select() können Sie feststellen, wann das Senden weiterer Daten möglich ist. 

Returnwert

>=0:

bei Erfolg. Der Wert gibt die Anzahl der gesendeten Bytes an.

-1:

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehleranzeige durch errno

EBADF

Der Parameter s ist kein gültiger Deskriptor.

EFAULT

Die Länge des Bereichs für die Aufnahme der Adresse ist zu klein, oder die Länge des Bereichs für die Nachricht ist zu klein.

EIO

E/A-Fehler. Die Meldung konnte nicht an das Transportsystem übergeben werden.

EMSGSIZE

Die Nachricht ist zu groß, um auf einmal gesendet zu werden.

ENETDOWN

Die Verbindung zum Netzwerk ist nicht mehr aktiv.

ENOTCONN

Für den Socket besteht keine Verbindung. Ein Lese-/Schreibversuch wurde zurückgewiesen.

EOPNOTSUPP

  • Der Parameter flags wurde mit einem Wert ungleich 0 spezifiziert. Dies wird jedoch nicht unterstützt.

oder

  • Der Socket hat nicht den Typ SOCK_STREAM, die Operation wird aber nur für Stream-Sockets unterstützt.

EPIPE

Es besteht keine Verbindung zum Partner (nur bei Sockets vom Typ SOCK_STREAM).

EWOULDBLOCK

Der Socket ist als nicht-blockierend markiert und die geforderte Operation würde blockieren.

Siehe auch

connect(), getsockopt(), recv(), select(), soc_ioctl(), soc_write(), socket()