|
Beschreibung
Mit der Funktion t_open() richtet der Benutzer einen Transportendpunkt durch Öffnen einer Datei eines UNIX-Systems ein, die einen bestimmten Transportanbieter (d.h. das Transportprotokoll) kennzeichnet. Der Aufruf von t_open() ist der erste Schritt bei der Initialisierung eines Transportendpunkts.
t_open() liefert einen Dateideskriptor auf einen Transportendpunkt dieses Typs zurück.
Unterstützt werden auf Basis des TCP/IP-Protokolls:
/dev/tcp für das Eröffnen eines verbindungsorientierten Transportendpunkts
/dev/udp für das Eröffnen eines verbindungslosen Transportendpunkts
Mit dem Parameter path übergibt der Benutzer einen Zeiger auf den Pfadnamen der zu öffnenden Datei. oflag kann mittels bitweiser inklusiver ODER-Verknüpfung von O_NDELAY bzw. O_NONBLOCK mit O_RDWR gebildet werden. Diese Optionen sind in der Include-Datei <fcntl.h> deklariert.
Der mit t_open() eingerichtete Transportendpunkt wird in nachfolgenden Aufrufen von XTI-Funktionen durch den von t_open() zurückgelieferten Dateideskriptor identifiziert.
Der Parameter info zeigt auf ein Objekt vom Typ struct t_info, in dem t_open() die Characteristik des darunter liegenden Transportprotokolls zurückliefert.
Wenn beim Aufruf von t_open() als aktueller Parameter für info der Null-Zeiger übergeben wird, liefert t_open() keine Protokollinformation zurück.
Die Struktur t_info ist in <xti.h> wie folgt deklariert:
struct t_info { long addr; /* max. Länge der Transportprotokolladresse */ long options; /* max. Anzahl Bytes der protokollspez. Optionen */ long tsdu; /* max. Größe eines Datenpakets (TSDU) */ long etsdu; /* max. Größe eines Pakets für Vorrangdaten (ETSDU) */ long connect; /* max. erlaubte Datenmenge beiVerbindungsaufbau-Funktionen */ long discon; /* max. erlaubte Datenmenge bei t_snddis() und t_rcvdis() */ long servtype; /* von dem Transportanbieter angebotener Diensttyp */ long flags; /* andere Information des Transportanbieters /* };
Im Einzelnen haben die Werte der t_info-Komponenten folgende Bedeutung:
addr
Ein Wert ≥ 0 gibt die maximale Länge einer Transportprotokoll-Adresse an. Der Wert -1 zeigt an, dass die Adresslänge nicht begrenzt ist. Der Wert -2 zeigt an, dass der Transportanbieter keinen Benutzerzugriff auf die Transportprotokolladresse unterstützt.
options
Ein Wert ≥ 0 gibt an, welche maximale Länge (in Bytes) für protokollspezifische Optionen der Transportanbieter unterstützt. Der Wert -1 zeigt an, dass die Länge der Optionen nicht begrenzt ist. Der Wert -2 zeigt an, dass der Transportanbieter keine Optionen unterstützt, die vom Benutzer beeinflusst werden können.
tsdu
Ein Wert > 0 gibt die maximale Länge einer Transportdienst-Dateneinheit (TSDU) an. Der Wert 0 zeigt an, dass der Transportanbieter das Konzept der TSDU nicht unterstützt, obwohl er das Senden eines Datenstroms ohne Einhaltung logischer Blockgrenzen über die Verbindung anbietet. Der Wert -1 zeigt an, dass die Länge einer TSDU nicht begrenzt ist. Der Wert -2 zeigt an, dass der Transportanbieter die Übertragung normaler Daten nicht unterstützt.
etsdu
Ein Wert > 0 gibt die maximale Länge einer vorrangigen Transportdienst-Dateneinheit (ETSDU) an. Der Wert 0 zeigt an, dass der Transportanbieter das Konzept der ETSDU nicht unterstützt, obwohl er das Senden eines Datenstroms ohne Einhaltung logischer Blockgrenzen über die Verbindung anbietet. Der Wert -1 zeigt an, dass die Länge einer ETSDU nicht begrenzt ist. Der Wert -2 zeigt an, dass der Transportanbieter die Übertragung von Vorrangdaten nicht unterstützt.
connect
Ein Wert ≥ 0 gibt die maximale Anzahl Daten an, die mit Funktionen zum Verbindungsaufbau gesendet werden können. Der Wert -1 zeigt an, dass die Menge der Daten, die während des Verbindungsaufbaus gesendet werden können, unbegrenzt ist. Der Wert -2 zeigt an, dass der Transportanbieter das Senden von Daten mit Funktionen zum Verbindungsaufbau nicht unterstützt.
discon
Ein Wert ≥ 0 gibt die maximale Anzahl Daten an, die mit Funktionen t_snddis() und t_rcvdis() gesendet werden können. Der Wert -1 zeigt an, dass die Menge der Daten, die mit Funktionen für den Verbindungsabbau gesendet werden können, unbegrenzt ist. Der Wert -2 zeigt an, dass der Transportanbieter das Senden von Daten mit Funktionen zum Verbindungsabbau nicht unterstützt.
servtype
Diese Komponente spezifiziert den Diensttyp, der vom Transportanbieter unterstützt wird (siehe unten).
flags
Dieses Feld spezifiziert andere Informationen des Transportanbieters (derzeit werden keine Informationen geliefert).
Wenn der Transportdienstbenutzer protokollunabhängig sein möchte, kann er anhand der oben genannten Werte ermitteln, wie groß die Puffer zur Speicherung der einzelnen Informationen sein müssen. Alternativ kann der Benutzer die Funktion t_alloc() verwenden, um Speicher für diese Puffer anzulegen. Ein Fehler tritt auf, wenn ein Benutzer die zulässigen Grenzwerte beim Aufruf einer XTI-Funktion überschreitet.
Die Komponente info->servtype enthält nach Ausführung von t_open() einen der folgenden Werte:
T_COTS_ORD
Der Transportanbieter unterstützt einen verbindungsorientierten Dienst mit einem optionalen geordneten Verbindungsabbau. Für diesen Diensttyp liefert t_open() den Wert -2 für etsdu, connect und discon zurück.
T_CLTS
Der Transportanbieter unterstützt einen verbindungslosen Dienst. Für diesen Diensttyp liefert t_open() den Wert -2 für etsdu, connect und discon zurück.
Zu einem bestimmten Zeitpunkt kann ein Transportendpunkt nur einen der genannten Dienste unterstützen.
Returnwert
Bei erfolgreicher Ausführung liefert t_open() einen gültigen Dateideskriptor zurück.
Im Fehlerfall wird -1 zurückgeliefert und t_errno gesetzt, um den Fehler anzuzeigen.
Fehler
TSYSERR
Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.
TBADFLAG
Eine ungültige Option wurde angegeben.
TBADNAME
Der in path angegebene Name ist ungültig.
TPROTO
Eine Verbindung zum Transportsystem konnte nicht aufgebaut werden.