Atari Logo
Atari Computer

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

Der Connection Manager

Der Connection Manager enthält all die Funktionen, die von High-Level-Protokollen wie TCP und UDP zur Verfügung gestellt werden, um Daten von einem Client zu empfangen. Es gibt Funktionen, um einzelne Bytes oder ganze Datenblöcke zu empfangen und Informationen über Verbindungsparameter zu bekommen.
Die Aufrufe:

Die Funktion CNkick
    int16  cdecl  CNkick (int16 handle);
Funktion: "Kickt" eine Verbindung (s. Beschreibung)

Protokolle, die sorgfältig Flußkontrollmechanismen implementieren, können von unzuverlässigen Datenwegen leicht ausgebremst werden. Wenn Acknowledgement-Datagramme, also solche, die abgeschickt werden, um eine Bestätigung eines Verbindungsaufbaus mit dem Remote Host zu erhalten, verlorengehen, kann es eine Weile dauern, bis die Antwort kommt und ein weiteres Acknowledgement-Datagramm versendet wird. Mit dieser Funktion kann die sofortige Übermittlung einer "Bestätigung" (Acknowledgement) und von Daten, die noch nicht bestätigt wurden, erzwungen bzw. beschleunigt werden.

Da TCP darauf ausgelegt wurde, auch unter schlechtesten Umständen zu arbeiten, sollte diese Funktion mit Bedacht benutzt werden! Vermeiden sie die häufige Verwendung von CNkick! Wird sie bei UDP Pseudo-Verbindungen benutzt, so hat diese Funktion keine Wirkung.

Liefert E_NORMAL, oder E_UNREACHABLE, E_CONNECTFAIL, E_REFUSE oder E_RRESET.


Die Funktion CNbyte_count
    int16  cdecl  CNbyte_count (int16 handle);
Liefert Informationen über die Anzahl der empfangenen "schwebenden" Bytes.
In jeder TCP- oder UDP-Pseudo-Verbindung kann mit diesem Aufruf in Erfahrung gebracht werden, wieviele Bytes im Input-Puffer angekommen sind. Die zurückgelieferte Anzahl der Bytes kann sofort in den für den Empfang zuständigen Aufrufen
CNget_char, CNget_NDB, CNget_block oder CNgets weiterverwendet werden.

Gibt die Anzahl der Bytes oder E_LISTEN, E_NODATA, E_EOF, E_UNREACHABLE, E_CONNECTFAIL, E_REFUSE oder E_RRESET zurück.


Die Funktion CNget_char
    int16  cdecl  CNget_char (int16 handle);
Holt ein empfangenes Zeichen oder Byte aus einer Verbindung.

Diese Funktion holt ein einzelnes Zeichen oder Byte aus der Input-Queue der TCP- oder UDP-Pseudo-Verbindung, die von 'handle' festgelegt wurde.

Liefert das erhaltene Byte (das untere Byte eines 16 Bit-Wortes), oder E_LISTEN, E_EOF, E_NODATA, E_UNREACHABLE, E_CONNECTFAIL, E_REFUSE oder E_RRESET.


Die Funktion CNget_NDB
    NDB *  cdecl  CNget_NDB (int16 handle);
Holt einen Datenblock aus der Verbindung.

Ähnlich CNget_char holt diese Funktion einen ganzen Datenblock aus der Input-Queue der TCP- oder UDP-Pseudoverbindung, die durch 'handle' spezifiziert wurde. Diese Blöcke entsprechen ankommenden Datagrammen. Diese Funktion ist daher wahrscheinlich die beste Möglichkeit, UDP Datagramme zu empfangen, doch es ist auch die effizienteste Methode, hereinkommende Daten einer TCP-Verbindung aufzunehmen.

Die Funktion gibt einen Pointer auf einen Network Data Block zurück. Die Struktur und die zugehörigen Daten sind ge'KRmalloc'te Blöcke, für die nun die aufrufende Applikation zuständig ist (mit jeder Struktur muß KRfree aufgerufen werden). Die Struktur beinhaltet als Einträge die Adresse der Daten ('ndata') und die Länge der gültigen Bytes ('len'). Etwas C-Code zeigt, wie ein NDB verwaltet werden sollte.

Die Funktion liefert den Pointer auf den nächsten Datenblock, oder NULL, wenn ein Fehler aufgetreten ist oder keine NDBs in der Queue sind.


Die Funktion CNget_block
    int16  cdecl  CNget_block (int16 handle, char *buffer, int16 length);
Holt einen empfangenen Datenblock aus einer Verbindung.

Bisher ist keine Funktionsbeschreibung verfügbar, da sie demnächst möglicherweise noch in ihrer Spezifikation erweitert wird. Hier eine Vorabversion von Steve Adam:


Die Funktion CNgetinfo
    CIB *  cdecl  CNgetinfo (int16 handle);
Holt Informationen über eine Verbindung ein.

Die Funktion liefert einen Pointer auf eine CIB-Struktur zurück, die alle wichtigen Informationen über eine Verbindung enthält.

CIB-Struktur:Die "Connection Information Block"-Struktur. Ein Pointer auf diese Struktur wird von CNgetinfo zurückgeliefert.

typedef  struct cib {
    uint16   protocol;     /* TCP or UDP or ...               */
    CAB      address;      /* Adress information              */
    uint16   status;       /* Net status. 0 means normal      */
 } CIB;

Net Status: Der ICMP Network Status für die TCP/UDP-Verbindung ist ein 16 Bit Wort, das Informationen des zuletzt empfangenen ICMP Packets über die Verbindung enthält. Der ICMP-Typ ist in den oberen 8 Bits codiert, der ICMP-Code findet sich in den unteren 8 Bits. Der ICMP-Typ kann sein: Die Bedeutung des ICMP-Codewertes hängt vom ICMP-Typ ab.

Die Informationen umfassen IP-Adressen beider Endpunkte, Portnummer usw. Diese Information wird von STinG automatisch aktualisiert, aber es ist nicht möglich, das Verhalten der Verbindung zu verändern, indem man in die CIB-Struktur schreibt.

Nachdem die assoziierte (TCP+UDP) Verbindung über den entsprechenden Aufruf geschlossen wurde, darf auf die CIB-Struktur nicht mehr zugegriffen werden. Es wird entweder ein Pointer auf die CIB-Struktur oder, im Falle eines Fehlers, NULL zurückgeliefert.


Die Funktion CNgets
    int16  cdecl  CNgets (int16 cn, uint8 *buffer, int16 len, uint8 delim);
Holt einen begrenzten Block aus einer Verbindung.

Ähnlich dem gets() - Aufruf aus stdio empfängt diese Funktion Daten, bis ein festgelegter Begrenzer erreicht wird. In Textübertragungen wird 'delim' meist '\r' oder '\n' sein. Im ersten Fall werden zum Beispiel alle Daten bis zum Byte '\r' in den Puffer übertragen, sofern die Länge, wie in 'len' festgelegt, paßt. Das'\r' wird gelesen, aber nicht übertragen; der Block wird im Puffer mit dem Byte '\0' terminiert. Der Aufruf liefert die Anzahl der Bytes bis zum Begrenzer, also die Größe des Puffers ohne das abschließende Byte '\0'.

Es ist zu beachten, daß bei mit "\r\n" beendeten Blöcken der Aufruf das "\n" nicht filtern wird, wenn 'delim' als "\r" festgelegt ist, und umge- kehrt.

Offensichtlich ist diese Funktion am sinnvollsten für Stream-orientierte Verbindungen (TCP), sie funktioniert aber auch mit Datagramm-basierten (UDP). Bei diesen werden die Datagramme wie ein Datenstrom behandelt. Dies macht natürlich nur unter besonderen Umständen Sinn.

Die Funktion liefert E_NORMAL zurück, wenn alles glatt läuft; bei zuwenig Daten im Input-Puffer, so daß der Begrenzer nicht gefunden wird, wird E_NODATA zurückgegeben, oder E_BIGBUF, wenn der Puffer nicht alle Daten aufnehmen kann. In den letzten beiden Fällen werden keine Daten gelesen.


Zurück zur Startseite
Zum Anfang der Seite


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