Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

t_sndudata() - Datagramme versenden

&pagelevel(4)&pagelevel

#include <xti.h>

int t_sndudata(int fd, struct t_unitdata *unitdata);

Beschreibung

Mit der Funktion t_sndudata() sendet der Benutzer im verbindungslosen Modus ein Datagramm an einen anderen Transportbenutzer.

Der Parameter fd spezifiziert den lokalen Transportendpunkt, über den das Datagramm gesendet wird.

Der Parameter unitdata ist ein Zeiger auf ein Objekt vom Typ struct t_unitdata.

Die Struktur t_unitdata ist in <xti.h> wie folgt deklariert:

struct t_unitdata {
   struct netbuf addr;
   struct netbuf opt;
   struct netbuf udata;
};

Vor Aufruf von t_rcvudata() spezifiziert der Benutzer in unitdata->addr die Ziel-Protokolladresse und in unitdata->udata die zu übertragenden Daten.

Das Setzen von protokollspezifischen Optionen in unitdata->opt wird vom Transportanbieter nicht unterstützt.

Falls der Benutzer in unitdata->addr.len den Wert 0 spezifiziert hat und der Transportanbieter das Versenden von Null-Bytes nicht unterstützt, liefert t_sndudata() den Wert -1 zurück und setzt t_errno auf TBADDATA.

Im Standardfall arbeitet t_sndudata() im synchronen Modus, d.h. t_sndudata() wartet (blockiert), falls Flusskontroll-Beschränkungen verhindern, dass der Transportanbieter das Datagramm zum Zeitpunkt des Aufrufs von t_sndudata() akzeptiert. Wenn jedoch zuvor mit t_open() oder der POSIX-Funktion fcntl() für den durch fd spezifizierten Transportendpunkt O_NDELAY oder O_NONBLOCK gesetzt wurde, arbeitet t_sndudata() im asynchronen Modus und beendet sich mit Fehler, falls der Transportanbieter das Datagramm nicht sofort akzeptiert.

Wenn t_sndudata() in einem ungültigen Zustand aufgerufen wurde oder wenn die in unitdata->udata.len spezifizierte Datagrammlänge größer ist als die TSDU-Länge, generiert der Transportanbieter einen EPROTO-Protokollfehler (siehe Fehler TSYSERR). Wenn der EPROTO-Fehler auf Grund eines ungültigen Zustands generiert wurde, wird der Fehler erst dann gemeldet, wenn der Transportendpunkt fd referenziert wird. Die Länge der TSDU (Transportdienst-Dateneinheit) wird von den Funktionen t_open() und t_getinfo() zurückgeliefert.

Returnwert

0:

Bei Erfolg.

-1:

Bei Fehler. t_ errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

TBADADDR

Die angegebene Protokolladresse hatte ein falsches Format oder enthielt falsche Informationen.

TBADDATA

Der Parameter nbytes hat den Wert 0, aber das Versenden von Null-Bytes wird vom darunter liegenden Transportanbieter nicht unterstützt, oder die Nachricht war zu groß, um auf einmal gesendet zu werden.

TBADF

Der angegebene Dateideskriptor verweist nicht auf einen Transportendpunkt.

TFLOW

O_NDELAY oder O_NONBLOCK wurde gesetzt, aber die Flusskontrolle hat nicht erlaubt, dass der Transportanbieter zu diesem Zeitpunkt Daten annimmt.

TLOOK

Auf dem durch fd übergebenen Transportendpunkt ist ein asynchrones Ereignis eingetreten und erfordert sofortige Bearbeitung.

TNOTSUPPORT

Diese Funktion wird vom darunter liegenden Transportanbieter nicht unterstützt.

TSYSERR

Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.

Im vorliegenden Fall enthält die Fehlervariable errno genauere Informationen:

EFAULT

Der Bereich, der in unitdata->addr, unitdata->opt oder unitdata->udata angegeben ist, liegt außerhalb des Prozess-Adressbereichs.

ENOBUFS

Zurzeit stehen zu wenig System-Ressourcen zur Verfügung, um den Sendeauftrag auszuführen.

EINTR

Der Aufruf wurde durch ein Signal unterbrochen.

Siehe auch

t_rcvudata(), t_rcvuderr(), fcntl()