Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Zustände und Zustandsübergänge

&pagelevel(3)&pagelevel

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_COTS_ORD
T_CLTS

T_UNBND

initialisiert, aber nicht eingebunden

T_COTS
T_COTS_ORD
T_CLTS

T_IDLE

keine Verbindung aufgebaut

T_COTS
T_COTS_ORD
T_CLTS

T_OUTCON

gesendete Verbindung wartet auf den Server

T_COTS
T_COTS_ORD

T_INCON

ankommende Verbindung wartet auf den Server

T_COTS
T_COTS_ORD

T_DATAXFER

Datenübertragung

T_COTS
T_COTS_ORD

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
T_COTS_ORD
T_CLTS

bind

erfolgreiches Beenden von t_bind()

T_COTS
T_COTS_ORD
T_CLTS

optmgmt

erfolgreiches Beenden von t_optmgmt()

T_COTS_ORD
T_CLTS

unbind

erfolgreiches Beenden von t_unbind()

T_COTS
T_COTS_ORD
T_CLTS

closed

erfolgreiches Beenden von t_close()

T_COTS
T_COTS_ORD
T_CLTS

connect1

erfolgreiches Beenden von t_connect() im synchronen Betrieb

T_COTS
T_COTS_ORD

connect2

TNODATA-Fehler bei t_connect() im asynchronen Betrieb oder TLOOK-Fehler wegen einer am Kommunikationsendpunkt eintreffenden Anforderung zum Verbindungsabbau

T_COTS
T_COTS_ORD

accept1

erfolgreiches Beenden von t_accept() mit ocnt == 1,
fd == resfd

T_COTS
T_COTS_ORD

accept2

erfolgreiches Beenden von t_accept() mit ocnt == 1,
fd != resfd

T_COTS
T_COTS_ORD

accept3

erfolgreiches Beenden von t_accept() mit ocnt >1

T_COTS
T_COTS_ORD

snd

erfolgreiches Beenden von t_snd()

T_COTS
T_COTS_ORD

snddis1

erfolgreiches Beenden von t_snddis() mit ocnt <=1

T_COTS
T_COTS_ORD

snddis2

erfolgreiches Beenden von t_snddis() mit ocnt >1

T_COTS
T_COTS_ORD

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
T_COTS_ORD

rcvconnect

erfolgreiches Beenden von t_rcvconnect()

T_COTS
T_COTS_ORD

rcv

erfolgreiches Beenden von t_rcv()

T_COTS
T_COTS_ORD

rcvdis1

erfolgreiches Beenden von t_rcvdis() mit ocnt <= 0

T_COTS
T_COTS_ORD

rcvdis2

erfolgreiches Beenden von t_rcvdis() mit ocnt = = 1

T_COTS
T_COTS_ORD

rcvdis3

erfolgreiches Beenden von t_rcvdis() mit ocnt > 1

T_COTS
T_COTS_ORD

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
T_COTS_ORD

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:

  1. Setze die Anzahl der anstehenden Verbindungsanforderungen auf 0.

  2. Inkrementiere die Anzahl der anstehenden Verbindungsanforderungen.

  3. Dekrementiere die Anzahl der anstehenden Verbindungsanforderungen.

  4. Ü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
[3]




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