|
Beschreibung
Mit der Funktion t_bind() ordnet der Benutzer dem durch den Parameter fd spezifizierten Transportendpunkt eine Protokolladresse zu und aktiviert diesen Transportendpunkt.
Nach erfolgreicher Ausführung von t_bind() hat der Benutzer folgende Möglichkeiten:
Im verbindungsorientierten Modus kann der Benutzer den durch fd spezifizierten Transportendpunkt mit t_listen() auf anstehende Verbindungsanforderungen überprüfen; anschließend kann der Benutzer auf fd ggf. Verbindungen mit t_accept() annehmen. Ebenso kann der Benutzer über den Transportendpunkt fd mit t_connect() Verbindungsanforderungen an andere Transportendpunkte schicken.
Im verbindungslosen Modus kann der Benutzer über den durch fd spezifizierten Transportendpunkt Datagramme versenden oder empfangen.
Die Parameter req und ret zeigen jeweils auf ein Objekt vom Typ struct t_bind.
Die Struktur t_bind ist in <xti.h> wie folgt deklariert:
struct t_bind { struct netbuf addr; unsigned qlen; };
In req->addr spezifiziert der Benutzer die Protokolladresse, die dem Transportendpunkt zugeordnet werden soll. In req->addr.len spezifiziert der Benutzer die Länge (in Bytes) dieser Adresse. req->addr.buf zeigt auf den Adresspuffer. req->addr.maxlen ist ohne Bedeutung.
In ret->addr.buf übergibt der Transportbenutzer einen Zeiger auf einen Puffer; die maximale Länge dieses Puffers spezifiziert der Benutzer in ret->addr.maxlen. Nach erfolgreicher Ausführung liefert t_bind() in ret-> addr.buf die dem Transportendpunkt fd zugeordnete Adresse zurück. Die tatsächliche Länge dieser Adresse liefert t_bind() in ret->addr.len zurück.
Wenn die in ret->addr.maxlen angegebene Länge zu klein ist für die Aufnahme der von t_bind() zurückgelieferten Adresse, liefert t_bind() den Fehlercode TBUFOVFLW zurück. Der Zustand des Transportendpunkts ändert sich jedoch auf T_IDLE.
req->qlen und ret->qlen sind nur von Bedeutung, wenn fd im verbindungsorientierten Modus betrieben wird. Dort wird durch req->qlen und ret->qlen die Maximalzahl anstehender Verbindungsanforderungen festgelegt, die der Transportanbieter für den Transportendpunkt fd unterstützt. Eine anstehende Verbindungsanforderung ist eine vom Transportsystem an einen Transportendpunkt des Benutzers übergebene Verbindungsanforderung, die von diesem Benutzer bislang weder akzeptiert (t_accept()) noch zurückgewiesen (t_snddis()) wurde. Die Anzahl der vom Transportanbieter unterstützten Verbindungsanforderungen für den Transportendpunkt fd ergibt sich wie folgt:
Vor Aufruf von t_bind() spezifiziert der Benutzer in req->qlen die Anzahl anstehender Verbindungsanforderungen, die der Transportanbieter auf dem Transportendpunkt fd untersützen soll. req->qlen > 0 ist nur bei einem Transportendpunkt sinnvoll, den der Benutzer später mit t_listen() passiv auf anstehende Verbindungsanforderungen „abhört“.
req->qlen wird vom Transportanbieter ausgewertet. Falls der Transportanbieter die in req->qlen spezifizierte Anzahl anstehender Verbindungsanforderungen nicht unterstützen kann, setzt er den in req->qlen übergebenen Wert entsprechend herab. Niemals setzt der Transportanbieter jedoch einen req->qlen-Wert > 0 auf 0. Derzeit kann der Transportanbieter maximal 8 anstehende Verbindungsanforderungen unterstützen.
In ret->qlen liefert t_bind() die Anzahl anstehender Verbindungsanforderungen zurück, die der Transportanbieter für den Transportendpunkt fd tatsächlich unterstützt.
Wenn der Benutzer die zu bindende, also dem Transportendpunkt fd zuzuordnende Adresse nicht selbst spezifizieren möchte, übergibt er als aktuellen Parameter für req den Null-Zeiger. In diesem Fall wählt der Transportanbieter die zu bindende Adresse aus, wobei er für req->qlen implizit den Wert 0 voraussetzt.
Ebenso kann der Benutzer als aktuellen Parameter für ret den Null-Zeiger übergeben, wenn es ihm gleichgültig ist, welche Adresse bei t_bind() vom Transportanbieter an fd gebunden wird und welchen Wert qlen hat.
Es ist zulässig, im selben t_bind()-Aufruf sowohl für req als auch für ret jeweils den Null-Zeiger zu übergeben. Dann wählt der Transportanbieter die Adresse aus, die an fd gebunden wird; t_bind() liefert diese Information jedoch nicht an den Benutzer zurück.
Returnwert
0:
Bei Erfolg.
-1:
Bei Fehler. t_ errno wird gesetzt, um den Fehler anzuzeigen.
Fehler
TACCES
Der Benutzer hat keine Erlaubnis, die spezifizierte Adresse zu benutzen.
TADDRBUSY
Die spezifizierte Protokolladresse wird schon benutzt.
TBADADDR
Die spezifizierte Protokolladresse hatte ein falsches Format oder enthielt falsche Informationen.
TBADF
Der angegebene Dateideskriptor verweist nicht auf einen Transportendpunkt.
TBUFOVFLW
Die erlaubte Anzahl Bytes für einen Ergebnisparameter ist zu klein, um den Wert des Parameters zu speichern. Der Zustand des Transportanbieters wird in T_IDLE umgeändert, und die Information, die in *ret zurückgeliefert werden soll, wird gelöscht.
TNOADDR
Der Transportanbieter konnte keine Adresse reservieren (siehe auch "Abhängigkeiten vom BS2000-Transportsystem BCAM").
TOUTSTATE
Innerhalb einer Sequenz von XTI-Funktionsaufrufen für den Transportendpunkt fd wurde die Funktion an der falschen Stelle aufgerufen.
TSYSERR
Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.