t_snd(3N) t_snd(3N)
NAME
tsnd - Daten oder Vorrangdaten über eine Verbindung senden
SYNTAX
#include <sys/tiuser.h>
int tsnd(int fd, char *buf, unsigned nbytes, int flags);
BESCHREIBUNG
Diese Funktion ist für das Senden von Daten bzw. Vorrangdaten zustän-
dig. fd kennzeichnet den lokalen Transportendpunkt, über den die Daten
gesendet werden sollen, buf verweist auf die Benutzerdaten, nbytes
gibt die Anzahl Bytes der zu versendenden Benutzerdaten an, und flags
spezifiziert optionale Flags, die unten beschrieben werden.
Als Standard arbeitet tsnd im synchronen Modus und wartet, ob
Beschränkungen der Flußkontrolle dazu führen, daß die Daten nicht zum
Zeitpunkt des Aufrufs von dem Transportanbieter angenommen werden kön-
nen. Wenn jedoch ONDELAY oder ONONBLOCK gesetzt ist (mittels topen
oder fcntl), arbeitet tsnd im asynchronen Modus und schlägt sofort
fehl, wenn Beschränkungen in der Flußkontrolle bestehen.
Selbst wenn keine Flußkontrollbeschränkungen bestehen, wartet tsnd,
wenn interne Betriebsmittel von STREAMS nicht verfügbar sind, ungeach-
tet der Belegung von ONDELAY oder ONONBLOCK.
Bei erfolgreicher Ausführung liefert tsnd die Anzahl Bytes zurück,
die von dem Transportanbieter angenommen wurden. Normalerweise wird
diese Zahl gleich der Zahl Bytes sein, die in nbytes angegeben wurde.
Wenn jedoch ONDELAY oder ONONBLOCK gesetzt ist, ist es möglich, daß
nur ein Teil der Daten von dem Transportanbieter akzeptiert wird. In
diesem Fall setzt tsnd TMORE für die versendeten Daten (siehe unten)
und liefert einen Wert zurück, der kleiner als nbytes ist. Wenn nbytes
Null ist und das Senden von Null Bytes nicht von dem darunterliegenden
Transportanbieter unterstützt wird, liefert tsnd() -1 zurück, wobei
terrno auf TBADDATA gesetzt wird. Ein Rückgabewert Null zeigt an, daß
die Anfrage zum Versenden einer Datennachricht der Länge Null zum
Transportanbieter geschickt wurde.
Wenn TEXPEDITED in flags gesetzt ist, werden die Daten als Vorrangda-
ten versendet und von dem Transportanbieter dementsprechend behandelt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
t_snd(3N) t_snd(3N)
Wenn TMORE in flags gesetzt ist oder wie oben gesetzt wurde, wird
eine Meldung zum Transportanbieter geschickt, daß die Transport-
dienst-Dateneinheit (TSDU) oder die vorrangige Transportdienst-Daten-
einheit (ETSDU) durch mehrere Aufrufe von tsnd versendet wird. Jeder
Aufruf von tsnd mit gesetztem TMORE-Flag gibt an, daß ein weiterer
Aufruf von tsnd mit weiteren Daten für die aktuelle TSDU folgt. Das
Ende der TSDU (oder ETSDU) ist durch ein tsnd gekennzeichnet, bei dem
das TMORE-Flag nicht gesetzt wurde. Die Verwendung von TMORE erlaubt
einem Benutzer, große logisch zusammengehörende Daten aufzubrechen,
ohne die logischen Grenzen dieser Dateneinheiten am anderen Ende der
Verbindung zu verlieren. Das Flag sagt nichts darüber aus, wie die
Daten unterhalb der Transportschnittstelle für den Datentransfer
gepackt werden. Wenn der Transportanbieter das Konzept der TSDU nicht
unterstützt, was in dem Argument info bei der Rückkehr von topen oder
tgetinfo angezeigt wird, ist das Flag TMORE nicht von Bedeutung und
sollte deshalb ignoriert werden.
Die Größe einer TSDU oder ETSDU darf die Grenzen des Transportanbie-
ters, die von topen oder tgetinfo zurückgeliefert werden, nicht
überschreiten. Wenn die Grenze überschritten wird, tritt der Fehler
TSYSERR mit dem Systemfehler EPROTO auf. Das tsnd darf jedoch nicht
fehlschlagen, weil EPROTO-Fehler nicht sofort gemeldet werden dürfen.
In diesem Fall schlägt ein nachfolgender Aufruf, der auf den lokalen
Transportendpunkt zugreift, mit dem entsprechenden TSYSERR fehl.
Wenn tsnd im Zustand TIDLE durchgeführt wird, kann der Transport-
anbieter die Daten stillschweigend löschen. Falls tsnd in jedem ande-
ren als dem Zustand TDATAXFER durchgeführt wird, in TINREL oder
TIDLE, erzeugt der Transportanbieter einen Fehler TSYSERR mit dem
Systemfehler EPROTO (der in der oben beschriebenen Art und Weise
gemeldet werden kann).
FEHLER
Im Fehlerfall wird terrno auf einen der folgenden Werte gesetzt:
TBADF Der angegebene Dateideskriptor verweist nicht auf
einen Transportendpunkt.
TFLOW ONDELAY oder ONONBLOCK wurde gesetzt, aber die Fluß-
kontrolle hat nicht erlaubt, daß der Transportanbieter
zu diesem Zeitpunkt Daten akzeptiert.
TNOTSUPPORT Diese Funktion wird von dem darunterliegenden Trans-
portanbieter nicht unterstützt.
TSYSERR Während der Ausführung dieser Funktion ist ein System-
fehler aufgetreten.
TBADDATA nbytes ist Null, aber das Versenden von Null Bytes
wird von dem Transportanbieter nicht angeboten.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
t_snd(3N) t_snd(3N)
DIAGNOSE
Bei erfolgreicher Durchführung liefert tsnd die Anzahl Bytes zurück,
die von dem Transportanbieter angenommen wurden. Im Fehlerfall wird -1
zurückgeliefert und terrno gesetzt, um den Fehler anzuzeigen.
SIEHE AUCH
topen(3N), trcv(3N).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98