send(3N) send(3N)
NAME
send, sendto, sendmsg - Nachricht von einem Socket senden
SYNTAX
#include <sys/types.h>
#include <sys/socket.h>
int send(int s, const char *msg, int len, int flags);
int sendto(int s, const char *msg, int len, int flags,
const struct sockaddr *to, int tolen);
int sendmsg(int s, const struct msghdr *msg, int flags);
BESCHREIBUNG
Mit send(), sendto() und sendmsg() kann eine Nachricht von einem
Socket s, der mittels socket(3N) erzeugt wurde, zu einem anderen
Socket übertragen werden. send() kann nur verwendet werden, wenn der
Socket verbunden ist. sendto() und sendmsg() hingegen können in jedem
Fall benutzt werden.
Die Ziel-Adresse wird mit to übergeben, wobei tolen ihre Größe angibt.
Die Länge der Nachricht wird mit len angegeben. Ist die Nachricht zu
lang, um vom Protokoll der darunterliegenden Transport-Schicht ganz
transportiert zu werden, wird der Fehlerwert EMSGSIZE zurückgegeben.
Die Nachricht wird in diesem Fall nicht übertragen.
send() zeigt keinen Fehler an, wenn die Nachricht nicht empfangen wer-
den konnte. Der Rückgabewert -1 zeigt nur lokal festgestellte Fehler
an.
Wenn der Socket keinen Speicher mehr zum Puffern von zu übertragenden
Nachrichten hat, blockiert send(), wenn der Socket nicht als nicht-
blockierend definiert wurde [siehe fcntl(2)]. Sie können mit
select(3C) feststellen, wann das Senden weiterer Daten möglich ist.
Der Parameter flags wird durch eine ODER-Verknüpfung einer oder mehre-
rer der folgenden Optionen gebildet:
MSGOOB Diese Option läßt das Senden von "out-of-band"-Daten
an die Sockets zu, die dies unterstützen. Das darun-
terliegende Protokoll muß ebenfalls "out-of-band"-
Daten unterstützen. Im Augenblick unterstützen nur
Sockets vom Typ SOCKSTREAM, die in der Adreßfamilie
AFINET erzeugt wurden, "out-of-band"-Daten.
MSGDONTROUTE Die Option SODONTROUTE wird für die Dauer der Opera-
tion eingeschaltet. Sie wird nur von Analyse- oder
Routing-Programmen verwendet.
Eine Beschreibung der Datenstruktur msghdr finden Sie bei recv(3N).
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
send(3N) send(3N)
RÜCKGABEWERT
Die obigen Aufrufe geben die Anzahl der versendeten Bytes zurück, oder
-1, wenn ein Fehler aufgetreten ist.
DIAGNOSE
Die Aufrufe schlagen in folgenden Fällen fehl:
EBADF s ist ein ungültiger Deskriptor.
ENOTSOCK s verweist nicht auf einen Socket.
EINVAL tolen entspricht nicht der Größe einer gültigen
Adresse für die angegebene Adreßfamilie.
EINTR Die Operation wurde durch die Ausgabe eines Signals
unterbrochen, bevor zu versendende Daten gepuffert
werden konnten.
EMSGSIZE Das Socket erfordert, daß Nachrichten in einem Stück
versendet werden, dafür war die Nachricht jedoch zu
lange.
EWOULDBLOCK Das Socket ist als nicht-blockierend gekennzeichnet.
Die erforderliche Operation würde den Prozeß jedoch
blockieren.
ENOMEM Es war nicht genügend Speicher verfügbar, um die Ope-
ration durchzuführen.
ENOSR Es waren nicht genügend STREAMS-Betriebsmittel ver-
fügbar, um die Operation durchzuführen.
SIEHE AUCH
fcntl(2), write(2), select(3C), connect(3N), getsockopt(3N), recv(3N),
socket(3N).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98