In den folgenden Tabellen werden beschrieben:
Zustände der Transportschnittstelle
Ereignisse der Transportschnittstelle und t_look()
gesendete Ereignisse
ankommende Ereignisse
Zustandsübergänge auf Grund von Aktionen des Transportsystembenutzers
Zustandsübergänge der Transportschnittstelle
Ereignisse beim Fehler TLOOK
Zustände der Transportschnittstelle
In der folgenden Tabelle sind die Zustände beschrieben, die verwendet werden, um die Zustandsübergänge der Transportschnittstelle zu beschreiben.
Zustand | Bedeutung | Diensttyp |
T_UNINIT | nicht initialisiert; Anfangs- und Endzustand der Schnittstelle | T_COTS |
T_UNBND | initialisiert, aber nicht eingebunden | T_COTS |
T_IDLE | keine Verbindung aufgebaut | T_COTS |
T_OUTCON | gesendete Verbindung wartet auf den Server | T_COTS |
T_INCON | ankommende Verbindung wartet auf den Server | T_COTS |
T_DATAXFER | Datenübertragung | T_COTS |
T_OUTREL | geordneter Verbindungsabbau (wartet auf Bestätigung für den geordneten Verbindungsabbau) | T_COTS_ORD |
T_INREL | ankommender geordneter Verbindungsabbau (wartet auf eine Anforderung für den geordneten Verbindungsabbau) | T_COTS_ORD |
Ereignisse an der Transportschnittstelle und t_look()
Mit Hilfe der Funktion t_look() kann der Benutzer feststellen, welches Ereignis aufgetreten ist, wenn ein Fehler TLOOK gemeldet wird. Der Fehler TLOOK hat eine besondere Bedeutung für die Transportschnittstelle. TLOOK informiert den Benutzer, wenn eine Funktion der Schnittstelle durch ein unerwartetes asynchrones Ereignis am gegebenen Transportendpunkt unterbrochen wurde. Ein von TLOOK angezeigter Fehler darf daher nicht als ein Fehler in der Schnittstelle interpretiert werden. Die aufgerufene Funktion wird auf Grund des anstehenden Ereignisses nicht ausgeführt.
Ereignisse an der Transportschnittstelle:
Ereignis | Bedeutung |
T_LISTEN | Eine Verbindungsanforderung ist am Transportendpunkt angekommen. T_LISTEN kann nur bei einem Transportendpunkt auftreten, dem eine Adresse mit qlen > 0 zugeordnet ist. |
T_CONNECT | Die Bestätigung einer vorher gesendeten Verbindungsanforderung ist angekommen. Die Bestätigung kommt, wenn der Server eine Verbindungsanforderung annimmt. |
T_DATA | Benutzerdaten sind angekommen. |
T_DISCONNECT | Eine Nachricht, dass eine Verbindung abgebrochen oder zurückgewiesen wurde, ist angekommen. |
T_ORDREL | Der Auftrag für einen geordneten Verbindungsabbau ist angekommen. |
T_UDERR | Die Benachrichtigung über einen Fehler bei einem zuvor gesendeten Datagramm ist angekommen. |
Ereignisse beim Fehler TLOOK:
XTI-Funktion | Ereignis |
t_accept() | T_DISCONNECT, T_LISTEN |
t_connect() | T_DISCONNECT, T_LISTEN |
t_listen() | T_DISCONNECT |
t_rcv() | T_DISCONNECT, T_ORDREL |
t_rcvconnect() | T_DISCONNECT |
t_rcvrel() | T_DISCONNECT |
t_rcvudata() | T_UDERR |
t_snd() | T_DISCONNECT, T_ORDREL |
t_sndudata() | T_UDERR |
t_unbind() | T_LISTEN, T_DATA |
t_sndrel() | T_DISCONNECT |
t_snddis() | T_DISCONNECT |
Wenn an einem Transportendpunkt die Ausführung einer XTI-Funktion zu einem Fehler TLOOK führt, liefern nachfolgende Aufrufe derselben oder einer anderen XTI-Funktion, die vom gleichen TLOOK betroffen ist, solange den Fehler TLOOK zurück, bis das auslösende Ereignis behandelt ist. Das den Fehler TLOOK auslösende Ereignis können Sie mit der XTI-Funktion t_look() identifizieren und anschließend mit einer geeigneten anderen XTI-Funktion behandeln.
Gesendete Ereignisse
In folgender Tabelle sind die gesendeten Ereignisse beschrieben. Sie entsprechen den Rückgabewerten der angegebenen Transportfunktionen, wobei diese Funktionen einen Auftrag oder eine Antwort an den Transportanbieter senden.
In der Tabelle werden einige Ereignisse (z.B. accept) nach dem Kontext unterschieden, in dem sie auftreten. Der Kontext hängt von den Werten der folgenden Variablen ab:
ocnt: Anzahl der anstehenden Verbindungsanforderungen
fd: Dateideskriptor des aktuellen Transportendpunkts
refsd: Dateideskriptor des Transportendpunkts, an dem eine Verbindung angenommen wird
Ereignis | Bedeutung | Diensttyp |
opened | erfolgreiches Beenden von t_open() | T_COTS |
bind | erfolgreiches Beenden von t_bind() | T_COTS |
optmgmt | erfolgreiches Beenden von t_optmgmt() | T_COTS_ORD |
unbind | erfolgreiches Beenden von t_unbind() | T_COTS |
closed | erfolgreiches Beenden von t_close() | T_COTS |
connect1 | erfolgreiches Beenden von t_connect() im synchronen Betrieb | T_COTS |
connect2 | TNODATA-Fehler bei t_connect() im asynchronen Betrieb oder TLOOK-Fehler wegen einer am Kommunikationsendpunkt eintreffenden Anforderung zum Verbindungsabbau | T_COTS |
accept1 | erfolgreiches Beenden von t_accept() mit ocnt == 1, | T_COTS |
accept2 | erfolgreiches Beenden von t_accept() mit ocnt == 1, | T_COTS |
accept3 | erfolgreiches Beenden von t_accept() mit ocnt >1 | T_COTS |
snd | erfolgreiches Beenden von t_snd() | T_COTS |
snddis1 | erfolgreiches Beenden von t_snddis() mit ocnt <=1 | T_COTS |
snddis2 | erfolgreiches Beenden von t_snddis() mit ocnt >1 | T_COTS |
sndrel | erfolgreiches Beenden von t_sndrel() | T_COTS_ORD |
sndudata | erfolgreiches Beenden von t_sndudata() | T_CLTS |
Ankommende Ereignisse
Die ankommenden Ereignisse entsprechen den erfolgreichen Rückgabewerten der angegebenen Funktion, wobei diese Funktionen Daten oder Informationen über Ereignisse vom Transportanbieter erhalten. Das einzige ankommende Ereignis, das nicht direkt mit dem Rückgabewert einer Funktion zusammenhängt, ist pass_conn. Das Ereignis pass_conn tritt dann auf, wenn ein Benutzer eine Verbindung an einen anderen Transportendpunkt überträgt. Dieses Ereignis tritt bei einem Transportendpunkt auf, dem die Verbindung übergeben wurde, obwohl keine Funktion der Transportschnittstelle für ihn aufgerufen wurde. Das Ereignis pass_conn beschreibt das Verhalten, wenn ein Benutzer eine Verbindung auf einem anderen Transportendpunkt annimmt.
In der folgenden Tabelle werden die Ereignisse rcvdis nach dem Kontext unterschieden, in dem sie auftreten. Der Kontext hängt ab vom Wert von ocnt. Der Wert von ocnt gibt die Anzahl der anstehenden Verbindungsanforderungen auf dem Transportendpunkt an.
Ereignis | Bedeutung | Diensttyp |
listen | erfolgreiches Beenden von t_listen() | T_COTS |
rcvconnect | erfolgreiches Beenden von t_rcvconnect() | T_COTS |
rcv | erfolgreiches Beenden von t_rcv() | T_COTS |
rcvdis1 | erfolgreiches Beenden von t_rcvdis() mit ocnt <= 0 | T_COTS |
rcvdis2 | erfolgreiches Beenden von t_rcvdis() mit ocnt = = 1 | T_COTS |
rcvdis3 | erfolgreiches Beenden von t_rcvdis() mit ocnt > 1 | T_COTS |
rcvrel | erfolgreiches Beenden von t_rcvrel() | T_COTS_ORD |
rcvudata | erfolgreiches Beenden von t_rcvudata() | T_CLTS |
rcvuderr | erfolgreiches Beenden von t_rcvuderr() | T_CLTS |
pass_conn | Empfang einer übergebenen Verbindung | T_COTS |
Zustandsübergänge auf Grund von Aktionen des Transportbenutzers
In den Zustandstabellen, die unten aufgeführt sind, werden einige Zustandsübergänge von einer Reihe von Aktionen begleitet, die der Transportdienstbenutzer ausführen muss. Diese Aktionen werden mit der Notation "[n]" dargestellt, wobei n die Nummer der auszuführenden Aktion ist.
Es handelt sich dabei um die folgenden Aktionen:
Setze die Anzahl der anstehenden Verbindungsanforderungen auf 0.
Inkrementiere die Anzahl der anstehenden Verbindungsanforderungen.
Dekrementiere die Anzahl der anstehenden Verbindungsanforderungen.
Übergib eine Verbindung an einen anderen Transportendpunkt, wie in t_accept() angegeben.
Zustandstabellen
In den folgenden Tabellen sind die Zustandsübergänge der Transportschnittstelle beschrieben. Zu einem aktuellen Zustand und einem Ereignis wird der Übergang zum nächsten Zustand angezeigt. Außerdem sind alle Aktionen angegeben, die vom Benutzer des Transportsystems auszuführen sind; solche Aktionen sind mit "[n]" gekennzeichnet.
Der Inhalt eines Kästchens gibt jeweils den Folgezustand an. Dieser ist abhängig vom aktuellen Zustand (im Spaltenkopf angegeben) und dem aktuellen empfangenen oder gesendeten Ereignis (links in der betreffenden Zeile angegeben). Ein leeres Kästchen bedeutet, dass die entsprechende Zustands-/Ereignis-Kombination ungültig ist. Zusammen mit dem Folgezustand kann jedes Kästchen eine Aktionsliste enthalten (wie im vorherigen Abschnitt erläutert wurde). Der Transportdienstbenutzer muss die Aktionen in der angegebenen Reihenfolge ausführen.
Beim Lesen der Zustandstabellen sollten Sie folgende Punkte beachten:
In den Zustandstabellen wird auch die Funktion t_close() behandelt (siehe Ereignis closed in der folgenden Tabelle). Um einen Transportendpunkt zu schließen, kann t_close() jedoch von jedem Zustand aus aufgerufen werden. Wenn die Adresse an einen Transportendpunkt gebunden ist, wird bei Aufruf von t_close() die Adresse automatisch freigegeben.
Der Transportanbieter erkennt, wenn ein Transportdienstbenutzer eine Funktion außerhalb der vorgegebenen Reihenfolge aufruft. In diesem Fall weist der Transportanbieter die Funktion ab und setzt t_errno auf TOUTSTATE. Der Zustand ändert sich nicht.
Wenn ein anderer Transportfehler auftritt, ändert sich der Zustand normalerweise nicht. Eine Ausnahme hiervon ist ein Fehler TLOOK oder TNODATA bei t_connect(). Auf weitere Ausnahmen wird bei der Beschreibung der Funktionen im Abschnitt "Benutzerfunktionen von XTI(POSIX)" explizit hingewiesen. Bei den Zustandstabellen wird die korrekte Verwendung der Transportschnittstelle angenommen.
Die Funktionen t_getinfo(), t_getstate(), t_alloc(), t_free(), t_sync(), t_look() und t_error() sind in den Zustandstabellen nicht aufgeführt, da sie den Zustand nicht beeinflussen.
Jeweils in einer gesonderten Tabelle behandelt werden im Folgenden die Zustandsübergänge in den Phasen:
lokale Verwaltung (verbindungsorientierter und vebindungsloser Dienst)
Datenübertragung im verbindungslosen Dienst
Verbindungsaufbau, Datenübertragung, Verbindungsabbau im verbindungsorientierten Dienst
Zustandsübergänge bei der lokalen Verwaltung:
Ereignis | Zustand | ||
T_UNINIT | T_UNBND | T_IDLE | |
opened | T_UNBND | ||
bind | T_IDLE [1] | ||
optmgmt | T_IDLE | ||
unbind | T_UNBND | ||
closed | T_UNINIT |
Zustandsübergänge beim verbindungslosen Dienst:
Ereignis | Zustand |
T_IDLE | |
sndudata | T_IDLE |
rcvudata | T_IDLE |
rcvuderr | T_IDLE |
Zustandsübergänge beim verbindungsorientierten Dienst:
Ereignis | Zustand | |||||
T_IDLE | T_OUTCON | T_INCON | T_DATAXFER | T_OUTREL | T_INREL | |
connect1 | T_DATAXFER | |||||
connect2 | T_OUTCON | |||||
rcvconnect | T_DATAXFER | |||||
listen | T_INCONN [2] | T_INCONN [2] | ||||
accept1 | T_DATAXFER | |||||
accept2 | T_IDLE [3][4] | |||||
accept3 | T_INCON [3][4] | |||||
snd | T_DATAXFER | T_INREL | ||||
rcv | T_DATAXFER | T_OUTREL | ||||
snddis1 | T_IDLE | T_IDLE [3] | T_IDLE | T_IDLE | T_IDLE | |
snddis2 | T_IDLE [3] | |||||
rcvdis1 | T_IDLE | T_IDLE | T_IDLE | T_IDLE | ||
rcvdis2 | T_IDLE [3] | |||||
rcvdis3 | T_INCON [3] | |||||
sndrel | T_OUTREL | T_IDLE | ||||
rcvrel | T_INREL | T_IDLE | ||||
pass_conn | T_DATAXFER |