Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

Der TCP Manager

Der TCP Manager enthält all jene Funktionen, die für den normalen Datenstrom über das Netz benötigt werden. Dies betrifft Funktionen für den Datentransfer und für die Synchronisation mit dem Rechner am anderen Ende der Leitung.

Wenn TCP.STX nicht geladen wurde, sind nur Dummy-Funktionen verfügbar!

Die Funktionsaufrufe:


Die Funktion TCP_open
    int16  cdecl  TCP_open (uint32 rem_host, uint16 rem_port, uint16 tos, 
                            uint16 buffer_size); 
Öffnet eine TCP-Verbindung im aktiven oder passiven Modus.

Mit dieser Funktion richtet man einen Endpunkt für eine Kommunikation über TCP ein. Abhängig von den Parametern wird entweder ein Endpunkt, der "zuhört", also auf Daten wartet, oder eine Verbindung mit einem anderen, wartenden Endpunkt eingerichtet. Entsprechend kann der Modus passiv (zuhörend) oder aktiv (eine Verbindung einrichtend) eingestellt werden. Der Modus und der/die Endpunkt/e werden über die ersten beiden Parameter festgelegt (siehe unten). Der Parameter 'tos' ist die Art des IP-Dienstes, der während der Verbindung benutzt werden soll; 'buffer_size' bestimmt die Größe des Output-Puffers. Für letzteren sollten 2 KByte in so ziemlich allen Fällen ausreichend sein.

Die Adressierung kann nach zwei möglichen Schemata erfolgen. Das erste Schema ist absolut STiK-kompatibel, daher bestehen hier also auch die für STiK geltenden Einschränkungen. Das zweite Schema besitzt die volle BSD-Funktionalität, d.h., alle Verbindungsparameter können benutzt werden. Hier sind sowohl Port- als auch IP-Adresse für den lokalen Host und den "am anderen Ende der Leitung" zu nennen.

Nach der STiK-kompatiblen Methode spezifiziert der erste Parameter, 'rem_host', die IP-Adresse des Remote Host, der zweite Parameter 'rem_port' enthält die Nummer des Ports. Es wird nun eine Verbindung hergestellt. Lokale Parameter können hier nicht eingestellt werden. Eine passive Verbindung wird hergestellt, indem man den 'remote_host' auf 0 setzt, der Parameter 'rem_port' wird nun als lokale Portnummer benutzt. Jede hereinkommende Verbindung, die für diesen Port bestimmt ist, wird akzeptiert, es besteht keine Möglichkeit, daß STinG automatisch Verbindungen von unautorisierten Hosts oder solchen mit einer falschen Portnummer zurückweist.

Der erweiterte Adressierungsmodus

Der erweiterte Adressierungsmodus bedient sich einiger ungenutzter Portnummern, indem ihnen eine spezielle Bedeutung für die Benutzung als 'rem_port'-Parameter zugewiesen wird. Wenn als zweiter Parameter entweder TCP_ACTIVE oder TCP_PASSIVE übergeben wird, so wird nach dem erweiterten zweiten Schema verfahren. Der Parameter 'rem_port' legt in diesem Fall nur fest, ob eine aktive oder passive Verbindung gewünscht ist; der erste Parameter 'rem_host' wird als Zeiger auf eine CAB-Struktur (Connection Adressing Block) interpretiert, welche den Zweck hat, das gewünschte Unterset des ganzen Sets der IP-Adresse und Portnummer des lokalen und des Remote Host festzulegen. Parameter, die nicht festgelegt werden müssen, können auf 0 gesetzt werden. Für passive Endpunkte müssen Remote Host oder Port nicht festgelegt werden, die lokale IP-Adresse oder Portnummer werden automatisch eingesetzt, falls sie nicht spezifiziert wurden.

Achtung: Wenn ein Host eine Verbindung mit einem passiv geöffneten Endpunkt herstellt, so wird eine feste Verbindung etabliert. Mit diesem Endpunkt kann dann kein anderer Host mehr eine Verbindung aufnehmen. Sollten Sie die ganze Zeit einen offenen Endpunkt benötigen, so benutzen Sie einfach ein zweites Mal TCP_open, oder lassen Sie mehrere passive Endpunkte zur gleichen Zeit offen.

TCP_open wartet nicht darauf, daß eine Verbindung eingerichtet wird, sondern kehrt sofort zurück. Um auf das Zustandekommen einer Verbindung zu warten, kann man die Funktion TCP_wait_state benutzen. Eine andere (vielleicht flexiblere) Möglichkeit besteht darin, die Funktion CNbyte_count aufzurufen, welche E_LISTEN zurückliefern wird, sofern ein passiver Endpunkt noch im LISTEN-Modus (also wartend) ist. Noch eine Möglichkeit besteht darin, die Informationen zu überprüfen, auf die ein Zeiger zeigt, der von CNgetinfo zurückgeliefert wird.

Die Funktion gibt ein nicht-negatives Verbindungs-Handle oder einen (negativen) Fehlercode zurück. Möglich Fehlercodes sind E_UNREACHABLE (es wurde keine Route zum Zielhost gefunden oder die Leitung ist physikalisch unterbrochen), E_PARAMETER (für einen aktiven Endpunkt wurde kein Remote Host angegeben) oder E_NOMEM (der benötigte Speicher konnte nicht angefordert werden).

Bachten Sie, daß nur eine Dummy-Funktion verfügbar ist, wenn TCP.STX nicht geladen wurde. In diesem Fall wird immer E_UNREACHABLE zurückgegeben.


Die Funktion 'TCP_close'
    int16  cdecl  TCP_close (int16 handle, int16 timeout);
Funktion: Schließt eine TCP-Verbindung.

Bisher ist keine Funktionsbeschreibung vorhanden, da sie in ihrer Spezifikation demnächst vielleicht noch erweitert wird. Hier ist eine kurze Vorabversion von Steve Adam:

Auch hier ist nur Dummycode vorhanden, wenn TCP.STX nicht geladen wurde; in diesem Fall wird immer E_BADHANDLE zurückgegeben.


Die Funktion TCP_send
    int16  cdecl  TCP_send (int16 handle, char *buffer, int16 length);
Über diese Funktion werden Daten über eine TCP-Verbindung übertragen.

Die Funktionsbeschreibung ist noch nicht verfügbar, da die Funktion in ihrer Spezifikation demnächst vielleicht noch erweitert wird. Hier eine Kurzbschreibung von Steve Adam:

Auch hier ist nur Dummycode vorhanden, wenn TCP.STX nicht geladen wurde; in diesem Fall wird immer E_BADHANDLE zurückgegeben.


Die Funktion TCP_wait_state
    int16  cdecl  TCP_wait_state (int16 handle, int16 state, int16 timeout);
Wartet, bis sich die TCP-Verbindung in einem bestimmten Zustand befindet.

Diese Funktion wartet, bis die TCP-Verbindung sich im Zustand 'state' befindet, welcher irgendeiner der folgenden sein kann:
TCLOSED, TLISTEN, TSYN_SENT, TSYN_RECV, TESTABLISH, TFIN_WAIT1, TFIN_WAIT2, TCLOSE_WAIT, TCLOSING, TLAST_ACK oder TTIME_WAIT.
Es ist zu beachten, daß es bei manchen keinen Sinn macht, sie zu spezifizieren, da sie nicht direkt erreicht werden können.
'timeout' spezifiziert eine Verzögerung (in Sekunden), nach der der Aufruf in jedem Fall zurückkehrt, unabhängig davon, ob der gewünschte Zustand erreicht wurde oder nicht.

Die Funktion TCP_wait_state ruft intern _appl_yield auf, so daß das AES im kooperativen Multitasking fortfahren wird, während die Funktion wartet.

Gibt E_NORMAL, oder aber E_BADHANDLE, E_CNTIMEOUT, E_UNREACHABLE, E_CONNECTFAIL, E_REFUSE oder E_RRESET zurück.

Auch hier ist nur Dummycode vorhanden, wenn TCP.STX nicht geladen wurde; in diesem Fall wird immer E_BADHANDLE zurückgegeben.


Die Funktion TCP_ack_wait
    int16  cdecl  TCP_ack_wait (int16 handle, int16 timeout);
Wartet darauf, daß alle über die TCP-Verbindung gesendeten Daten bestätigt werden.
Diese Funktion wartet, bis über die spezifizierte Verbindung alle gepufferten herausgehenden Daten vom Remote Host bestätigt worden sind. Der Parameter 'timeout' gibt eine Verzögerung in Millisekunden an, nach der der Aufruf auf jeden Fall zurückkehrt, unabhängig davon, ob der Transfer bestätigt wurde oder nicht. TCP_ack_wait ruft intern _appl_yield auf, so daß das GEM AES im kooperativen Multitasking weiterarbeiten wird, während die Funktion wartet.

Gibt E_NORMAL, oder aber E_BADHANDLE, E_CNTIMEOUT, E_UNREACHABLE, E_REFUSE, E_CONNECTFAIL oder E_RRESET zurück.

Bitte beachten: Wenn TCP.STX nicht geladen ist, so steht nur eine Dummy- Funktion zur Verfügung. Diese gibt immer E_BADHANDLE zurück.


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum