TCP
Dieses Modul enthält Funktionen, die die TCP-Kommunikation steuern.
Zusammenfassung
Aufzählungen |
|
---|---|
anonymous enum
|
enum Definiert Flags, die an otTcpConnect() übergeben werden. |
anonymous enum
|
enum Definiert an otTcpSendByReference übergebene Flags. |
otTcpDisconnectedReason
|
enum |
otTcpIncomingConnectionAction{
|
enum Definiert eingehende Verbindungsaktionen. |
Typedefs |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
Eine verknüpfte Pufferstruktur zur Verwendung mit TCP. |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
Dieser Callback zeigt an, dass die TCP-Verbindung jetzt für die Zwei-Wege-Kommunikation bereit ist. |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef Dieser Callback gibt an, dass eine eingehende Verbindung, die mit diesem TCP-Listener übereinstimmt, angekommen ist. |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
Dieser Callback zeigt an, dass die Verbindung unterbrochen wurde und nicht mehr verwendet werden sollte oder dass eine Verbindung in den Status TIME-WAIT gewechselt ist. |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
Enthält Argumente für die Funktion otTcpEndpointInitialize(). |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
Dieser Callback informiert die Anwendung, dass der 3-Wege-Handshake abgeschlossen ist und die Verbindung nun hergestellt ist. |
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
|
typedefvoid(*
Dieser Callback informiert die Anwendung darüber, ob bei der Übertragung von Daten aus dem Sendepuffer an den Empfänger Fortschritte gemacht wurden. |
otTcpIncomingConnectionAction
|
typedef Definiert eingehende Verbindungsaktionen. |
otTcpListener
|
typedefstruct otTcpListener
|
otTcpListenerInitializeArgs
|
typedefstruct otTcpListenerInitializeArgs
Enthält Argumente für die Funktion otTcpListenerInitialize(). |
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
|
typedefvoid(*
Dieser Callback gibt die Anzahl der Byte an, die für den Verbrauch aus dem Empfangspuffer verfügbar sind. |
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
|
typedefvoid(*
Dieser Callback informiert die Anwendung, dass die Daten im bereitgestellten aData vom Verbindungs-Peer bestätigt wurden und dass aData und die darin enthaltenen Daten von der Anwendung zurückgefordert werden können. |
Funktionen |
|
---|---|
otTcpAbort(otTcpEndpoint *aEndpoint)
|
Beendet die mit diesem TCP-Endpunkt verknüpfte TCP-Verbindung zwangsweise.
|
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
|
Bindet den TCP-Endpunkt an eine IP-Adresse und einen Port.
|
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Informiert den TCP-Stack, dass die Anwendung
aNumBytes Byte an Daten zu Beginn des Empfangspuffers verarbeitet hat und dass der TCP-Stack diese Byte nicht mehr im Empfangspuffer beibehalten muss. |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
Zeichnet den Remote-Host und -Port für diese Verbindung auf.
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
Deinitialisiert diesen TCP-Endpunkt.
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
Ruft den Kontextzeiger ab, der bei der Initialisierung mit
aEndpoint verknüpft wurde. |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
Ruft die otInstance ab, die bei der Initialisierung mit
aEndpoint verknüpft wurde. |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
Initialisiert einen TCP-Endpunkt.
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Ruft einen Zeiger auf den lokalen Host und den Port eines TCP-Endpunkts ab.
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Ruft einen Zeiger auf den Host und Port des Peers eines TCP-Endpunkts ab.
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
Veranlasst, dass eingehende TCP-Verbindungen, die der angegebenen IP-Adresse und dem angegebenen Port entsprechen, die Callbacks dieses TCP-Listeners auslösen.
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
Deinitialisiert diesen TCP-Listener.
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
Ruft den Kontextzeiger ab, der bei der Initialisierung mit
aListener verknüpft wurde. |
otTcpListenerGetInstance(otTcpListener *aListener)
|
Ruft die otInstance ab, die bei der Initialisierung mit
aListener verknüpft wurde. |
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
|
Initialisiert einen TCP-Listener.
|
otTcpReceiveByReference(otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
|
Stellt der Anwendung eine verknüpfte Pufferkette bereit, die auf Daten verweist, die sich derzeit im TCP-Empfangspuffer befinden.
|
otTcpReceiveContiguify(otTcpEndpoint *aEndpoint)
|
Ordnet den Empfangspuffer neu an, sodass er im Speicher vollständig zusammenhängend ist.
|
otTcpSendByExtension(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Fügt Daten zum Sendepuffer hinzu, indem die Länge des endgültigen otLinkedBuffer im Sendepuffer um die angegebene Menge erweitert wird.
|
otTcpSendByReference(otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
|
Fügt dem Sendepuffer Daten hinzu, auf die vom verknüpften Puffer verwiesen wird, auf den
aBuffer verweist. |
otTcpSendEndOfStream(otTcpEndpoint *aEndpoint)
|
Informiert den Verbindungs-Peer, dass dieser TCP-Endpunkt keine weiteren Daten sendet.
|
otTcpStopListening(otTcpListener *aListener)
|
Bewirkt, dass dieser TCP-Listener eingehende Verbindungen nicht mehr überwacht.
|
Strukturen |
|
---|---|
otLinkedBuffer |
Eine verknüpfte Pufferstruktur zur Verwendung mit TCP. |
otTcpEndpoint |
Stellt einen TCP-Endpunkt dar. |
otTcpEndpointInitializeArgs |
Enthält Argumente für die Funktion otTcpEndpointInitialize(). |
otTcpListener |
Stellt einen TCP-Listener dar. |
otTcpListenerInitializeArgs |
Enthält Argumente für die Funktion otTcpListenerInitialize(). |
Aufzählungen
Anonyme Aufzählung
anonymous enum
Definiert an otTcpSendByReference
übergebene Flags.
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
Definiert eingehende Verbindungsaktionen.
Wird im otTcpAcceptReady()-Callback verwendet.
Attribute | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
Akzeptieren Sie die eingehende Verbindung. |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
Eingehende Verbindung zurückstellen (ohne Ton ignorieren) |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
Lehnen Sie die eingehende Verbindung ab. |
Typedefs
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
Eine verknüpfte Pufferstruktur zur Verwendung mit TCP.
Eine einzelne otLinkedBuffer-Struktur verweist über mData und mLength auf ein Array von Byte im Speicher. Das Feld „mNext“ wird verwendet, um eine Kette von otLinkedBuffer-Strukturen zu bilden.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
Dieser Callback zeigt an, dass die TCP-Verbindung jetzt für die Zwei-Wege-Kommunikation bereit ist.
Im Fall von TCP Fast Open kann dies geschehen, bevor der TCP-Verbindungs-Handshake tatsächlich abgeschlossen ist. Die Anwendung erhält die Kontextzeiger sowohl für den TCP-Listener, der die Verbindung akzeptiert hat, als auch für den TCP-Endpunkt, an dem sie akzeptiert wurde. Der bereitgestellte Kontext ist der Kontext, der dem TCP-Listener zugeordnet ist.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
Dieser Callback gibt an, dass eine eingehende Verbindung, die mit diesem TCP-Listener übereinstimmt, angekommen ist.
In der Regel akzeptiert die Anwendung die eingehende Verbindung. Dazu wird aAcceptInto
mit einem Zeiger auf den otTcpEndpoint gefüllt, in den die eingehende Verbindung akzeptiert wird. Dieser otTcpEndpoint muss bereits mit otTcpEndpointInitialize() initialisiert sein. Die Anwendung gibt dann OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT zurück.
Alternativ kann die Anwendung die Annahme der eingehenden Verbindung ablehnen. Die Anwendung kann dies auf zwei Arten tun. Erstens: Wenn die Anwendung OT_TCP_INCOMING_CONNECTION_ACTION_DEFER zurückgibt, ignoriert OpenThread die Anfrage zum Aufbau der Verbindung ohne Rückmeldung. Der Verbindungs-Peer wird die Anfrage wahrscheinlich noch einmal übertragen, woraufhin der Callback noch einmal aufgerufen wird. Dies ist nützlich, wenn Ressourcen derzeit nicht für die Verbindung zur Verfügung stehen, aber möglicherweise verfügbar sind, wenn der Verbindungs-Peer den Verbindungsversuch noch einmal überträgt. Zweitens: Wenn die Anwendung OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE zurückgibt, sendet OpenThread eine „Verbindung verweigert“-Nachricht an den Host, der versucht hat, eine Verbindung herzustellen. Wenn die Anwendung die eingehende Verbindung ablehnt, muss aAcceptInto
nicht ausgefüllt werden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabe |
Beschreibung der Handhabung der eingehenden Verbindung.
|
otTcpDisconnected
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
Dieser Callback zeigt an, dass die Verbindung unterbrochen wurde und nicht mehr verwendet werden sollte oder dass eine Verbindung in den Status TIME-WAIT gewechselt ist.
Sie kann auftreten, wenn ein Versuch zum Aufbau der Verbindung (durch Aufrufen von otTcpConnect() initiiert) fehlschlägt oder an einem beliebigen Punkt danach (z.B. wenn die Verbindung abläuft oder ein RST-Segment vom Verbindungs-Peer empfangen wird). Sobald dieser Callback ausgelöst wird, können alle Ressourcen freigegeben werden, die die Anwendung für diese Verbindung bereitgestellt hat (d.h. alle otLinkedBuffers
und Arbeitsspeicher, auf die sie verweisen, aber nicht der TCP-Endpunkt selbst oder Speicherplatz für die Empfangspuffer). Bei einer Verbindung, die in den Status TIME-WAIT übergeht, wird dieser Callback zweimal aufgerufen: einmal beim Eintritt in den TIME-WAIT-Status (mit OT_TCP_DISCONNECTED_REASON_TIME_WAIT und ein weiteres Mal, wenn der Status TIME-WAIT abläuft (mit OT_TCP_DISCONNECTED_REASON_NORMAL).
Details | |||||
---|---|---|---|---|---|
Parameter |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
Enthält Argumente für die Funktion otTcpEndpointInitialize().
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
Dieser Callback informiert die Anwendung, dass der 3-Wege-Handshake abgeschlossen ist und die Verbindung nun hergestellt ist.
Details | |||
---|---|---|---|
Parameter |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
Dieser Callback informiert die Anwendung darüber, ob bei der Übertragung von Daten aus dem Sendepuffer an den Empfänger Fortschritte gemacht wurden.
Dieser Callback ist für einen korrekten TCP-Vorgang nicht erforderlich. Die meisten Anwendungen können sich einfach auf den otTcpSendDone()-Callback verlassen, um verknüpfte Puffer zurückzufordern, sobald der TCP-Stack diese nicht mehr verwendet hat. Zweck dieses Callbacks ist die Unterstützung erweiterter Anwendungen, die von detaillierteren Informationen darüber profitieren, wie die Verbindung bei der Datenübertragung zum Verbindungs-Peer voranschreitet.
Die Operation dieses Callbacks ist eng mit dem Sendepuffer von TCP verbunden. Der Sendepuffer umfasst zwei Regionen. Zuerst befindet sich die „In-Flight“-Region am Anfang des Sendepuffers (vorne). Sie entspricht Daten, die an den Empfänger gesendet, aber noch nicht bestätigt wurden. Zweitens gibt es die Region „Backlog“, die aus allen Daten im Sendepuffer besteht, die sich nicht in der Region „In-Flight“ befinden. Der Bereich „Rückstand“ entspricht den Daten, die zum Senden in die Warteschlange gestellt, aber noch nicht gesendet wurden.
Der Callback wird als Reaktion auf zwei Ereignistypen aufgerufen. Erstens: Die „In-Flight“-Region des Sendepuffers kann kleiner werden, z.B. wenn der Empfänger Daten bestätigt, die wir zuvor gesendet haben. Zweitens kann der „Backlog“-Bereich des Sendepuffers kleiner werden (z.B., weil neue Daten gesendet wurden). Diese beiden Bedingungen treten häufig gleichzeitig als Reaktion auf ein ACK-Segment des Verbindungs-Peers auf, weshalb sie in einem einzigen Callback kombiniert werden.
Der TCP-Stack verwendet nur die aInSendBuffer
Byte am Ende des Sendepuffers. Wenn aInSendBuffer
um den Wert x sinkt, bedeutet dies, dass x zusätzliche Byte, die zuvor am Anfang des Sendepuffers standen, nicht mehr Teil des Sendepuffers sind und jetzt von der Anwendung zurückgefordert (d. h. überschrieben) werden können. Die Struktur otLinkedBuffer kann erst zurückgefordert werden, wenn alle Byte, auf die sie verweist, nicht mehr Teil des Sendepuffers sind.
Dieser Rückruf umfasst otTcpSendDone() in folgendem Sinne: Anwendungen können bestimmen, wann verknüpfte Puffer zurückgefordert werden können, indem aInSendBuffer
mit der Anzahl der Byte in jedem verknüpften Puffer verglichen wird. Wir gehen jedoch davon aus, dass otTcpSendDone(), das direkt angibt, welche otLinkedBuffers zurückgefordert werden können, wesentlich einfacher zu verwenden ist. Wenn beide Callbacks registriert und durch dasselbe Ereignis ausgelöst werden (z.B. dasselbe ACK-Segment empfangen), wird zuerst der otTcpSendDone()-Callback und dann dieser Callback ausgelöst.
Außerdem liefert dieser Callback aBacklog
, der angibt, wie viele Byte an Daten im Sendepuffer noch nicht in Bearbeitung sind. Bei Anwendungen, die dem Sendepuffer nur dann Daten hinzufügen möchten, wenn sicher ist, dass sie bald versendet werden, ist es möglicherweise sinnvoll, nur dann Daten zu senden, wenn aBacklog
ausreichend klein ist (0 oder nahe 0). Beispielsweise kann eine Anwendung aBacklog
verwenden, um auf Warteschlangenaufbau zu reagieren, indem sie Daten löscht oder aggregiert, um einen Datenrückstand zu vermeiden.
Nach einem Aufruf von otTcpSendByReference() oder otTcpSendByExtension() mit einer positiven Bytezahl wird der Callback otTcpForwardProgress() garantiert aufgerufen, um anzuzeigen, wann die zum Sendepuffer hinzugefügten Byte gesendet werden. Der Aufruf von otTcpForwardProgress() kann direkt nach dem Hinzufügen der Byte zum Sendepuffer (wenn einige dieser Byte sofort gesendet werden, wodurch der Rückstand verringert wird) oder zu einem späteren Zeitpunkt erfolgen (wenn die Verbindung einige oder alle Daten sendet, wodurch der Rückstand reduziert wird). Mit "immediately" (sofort) meinen wir, dass der Callback sofort für die Ausführung in einem Tasklet geplant ist. Um die Komplexität des Callbacks zu vermeiden, wird der Callback otTcpForwardProgress() nie direkt über die Funktionen otTcpSendByReference() oder otTcpSendByExtension() aufgerufen.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
otTcpIncomingConnectionAction
enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction
Definiert eingehende Verbindungsaktionen.
Wird im otTcpAcceptReady()-Callback verwendet.
otTcpListener
struct otTcpListener otTcpListener
otTcpListenerInitializeArgs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
Enthält Argumente für die Funktion otTcpListenerInitialize().
otTcpReceiveAvailable
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
Dieser Callback gibt die Anzahl der Byte an, die für den Verbrauch aus dem Empfangspuffer verfügbar sind.
Sie wird immer dann aufgerufen, wenn Bytes zum Empfangspuffer hinzugefügt werden und wenn das Ende des Streams erreicht ist. Wenn das Ende des Streams erreicht wurde (d.h., wenn keine weiteren Daten zum Lesen verfügbar werden, weil der Verbindungs-Peer das Ende der Verbindung für den Schreibvorgang geschlossen hat), ist aEndOfStream
„true“. aBytesRemaining
gibt schließlich an, wie viel Kapazität im Empfangspuffer noch vorhanden ist, um zusätzliche eingehende Daten aufzunehmen.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
Dieser Callback informiert die Anwendung, dass die Daten im bereitgestellten aData
vom Verbindungs-Peer bestätigt wurden und dass aData
und die darin enthaltenen Daten von der Anwendung zurückgefordert werden können.
Die aData
sind garantiert identisch mit denen, die über otTcpSendByReference() an TCP übergeben werden, einschließlich aller Erweiterungen, die über otTcpSendByExtension() betroffen sind.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
Funktionen
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
Beendet die mit diesem TCP-Endpunkt verknüpfte TCP-Verbindung zwangsweise.
Dadurch kann der TCP-Endpunkt sofort für eine andere Verbindung verwendet werden und der Sende- und Empfangspuffer wird geleert. Die Eigentümerschaft an allen von der Anwendung in otTcpSendByReference()- und otTcpSendByExtension()-Aufrufen bereitgestellten Daten wird an die Anwendung zurückübertragen. Die Callbacks und der Arbeitsspeicher des TCP-Endpunkts für den Empfangspuffer bleiben mit dem TCP-Endpunkt verknüpft.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
Bindet den TCP-Endpunkt an eine IP-Adresse und einen Port.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Informiert den TCP-Stack, dass die Anwendung aNumBytes
Byte an Daten zu Beginn des Empfangspuffers verarbeitet hat und dass der TCP-Stack diese Byte nicht mehr im Empfangspuffer beibehalten muss.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
Zeichnet den Remote-Host und -Port für diese Verbindung auf.
TCP Fast Open muss mit aFlags
aktiviert oder deaktiviert werden. Ist sie deaktiviert, wird der Handshake für den TCP-Verbindungsaufbau sofort initiiert. Wenn sie aktiviert ist, zeichnet diese Funktion lediglich den Remote-Host und den Port auf. Der Handshake der TCP-Verbindung erfolgt nur beim ersten Aufruf von otTcpSendByReference()
.
Wenn TCP Fast Open deaktiviert ist, muss der Aufrufer auf den otTcpEstablished
-Callback warten, der angibt, dass der Handshake der TCP-Verbindung abgeschlossen ist, bevor er mit dem Senden von Daten beginnen kann, z.B. durch Aufrufen von otTcpSendByReference()
.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
Deinitialisiert diesen TCP-Endpunkt.
Das bedeutet, dass OpenThread diesen TCP-Endpunkt nicht mehr verfolgt und die Zuweisung aller Ressourcen aufhebt, die er intern für diesen TCP-Endpunkt zugewiesen hat. Die Anwendung kann den Arbeitsspeicher, der den TCP-Endpunkt sichert, nach Bedarf wiederverwenden.
Wenn sie einer Live-TCP-Verbindung entspricht, wird die Verbindung ohne Ankündigung beendet (wie in otTcpAbort()). Alle Ressourcen, die die Anwendung für diesen TCP-Endpunkt bereitgestellt hat (verknüpfte Puffer für den Sendepuffer, Speicher für den Empfangspuffer, die aEndpoint
-Struktur selbst usw.), werden sofort an die Anwendung zurückgegeben.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
Ruft den Kontextzeiger ab, der bei der Initialisierung mit aEndpoint
verknüpft wurde.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Der mit
aEndpoint verknüpfte Kontextzeiger. |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
Ruft die otInstance ab, die bei der Initialisierung mit aEndpoint
verknüpft wurde.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Der mit
aEndpoint verknüpfte otInstance-Zeiger. |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
Initialisiert einen TCP-Endpunkt.
Der Aufruf dieser Funktion führt dazu, dass OpenThread den TCP-Endpunkt verfolgt und TCP-Daten im aEndpoint
speichert und abruft. Die Anwendung sollte nicht direkt auf die Felder in aEndpoint
zugreifen oder diese ändern. Wenn die Anwendung den Speicher-aEndpoint
zurückfordern muss, sollte sie otTcpEndpointDeinitialize() aufrufen.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
Ruft einen Zeiger auf den lokalen Host und den Port eines TCP-Endpunkts ab.
Der Inhalt des Hosts und des Ports kann veraltet sein, wenn dieser Socket keinen Verbindungsstatus hat und nach der letzten Verbindung nicht gebunden wurde.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Der lokale Host und Port von
aEndpoint . |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
Ruft einen Zeiger auf den Host und Port des Peers eines TCP-Endpunkts ab.
Die Inhalte des Hosts und des Ports können veraltet sein, wenn der Socket nicht verbunden ist.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Host und Port des Verbindungs-Peers von
aEndpoint . |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
Veranlasst, dass eingehende TCP-Verbindungen, die der angegebenen IP-Adresse und dem angegebenen Port entsprechen, die Callbacks dieses TCP-Listeners auslösen.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
Deinitialisiert diesen TCP-Listener.
Das bedeutet, dass OpenThread diesen TCP-Listener nicht mehr verfolgt und die Zuweisung aller Ressourcen aufhebt, die er intern für diesen TCP-Listener zugewiesen hat. Die Anwendung kann den Arbeitsspeicher, der den TCP-Listener unterstützt, nach Bedarf wiederverwenden.
Wenn der TCP-Listener aktuell aktiv ist, wird er nicht mehr überwacht.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
Ruft den Kontextzeiger ab, der bei der Initialisierung mit aListener
verknüpft wurde.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Der mit
aListener verknüpfte Kontextzeiger. |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
Ruft die otInstance ab, die bei der Initialisierung mit aListener
verknüpft wurde.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Der mit
aListener verknüpfte otInstance-Zeiger. |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
Initialisiert einen TCP-Listener.
Der Aufruf dieser Funktion führt dazu, dass OpenThread den TCP-Listener verfolgt und TCP-Daten in aListener
speichert und abruft. Die Anwendung sollte nicht direkt auf die Felder in aListener
zugreifen oder diese ändern. Wenn die Anwendung die speicherstützende aListener
zurückfordern muss, sollte sie otTcpListenerDeinitialize() aufrufen.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
Stellt der Anwendung eine verknüpfte Pufferkette bereit, die auf Daten verweist, die sich derzeit im TCP-Empfangspuffer befinden.
Die verknüpfte Pufferkette ist gültig, bis der Rückruf "empfang bereit" das nächste Mal aufgerufen wird oder bis zum nächsten Aufruf von otTcpReceiveContiguify() oder otTcpCommitReceive().
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
Ordnet den Empfangspuffer neu an, sodass er im Speicher vollständig zusammenhängend ist.
Dies ist optional. Eine Anwendung kann einfach die verknüpfte Pufferkette durchlaufen, die durch Aufrufen von otTcpReceiveByReference
abgerufen wird. Einige Anwendungen möchten diese Funktion möglicherweise aufrufen, um den Empfangspuffer zusammenhängend zu machen, um ihre Datenverarbeitung zu vereinfachen. Dies geht jedoch auf Kosten der CPU-Zeit, um die Daten im Empfangspuffer neu zu organisieren.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpSendByExtension
otError otTcpSendByExtension( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Fügt Daten zum Sendepuffer hinzu, indem die Länge des endgültigen otLinkedBuffer im Sendepuffer um die angegebene Menge erweitert wird.
Wenn der Sendepuffer leer ist, schlägt der Vorgang fehl.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
otTcpSendByReference
otError otTcpSendByReference( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags )
Fügt dem Sendepuffer Daten hinzu, auf die vom verknüpften Puffer verwiesen wird, auf den aBuffer
verweist.
Bei einem erfolgreichen Aufruf dieser Funktion gehören der verknüpfte Zwischenspeicher und die Daten, auf die er verweist, zum TCP-Stack. Sie sollten von der Anwendung erst geändert werden, wenn ein „send done“-Callback die Inhaberschaft dieser Objekte an die Anwendung zurückgibt. Es ist zulässig, diese Funktion aufzurufen, um der Sendewarteschlange einen weiteren verknüpften Puffer hinzuzufügen, auch wenn der Rückruf "Senden abgeschlossen" für einen vorherigen Aufruf dieser Funktion noch nicht ausgelöst wurde.
aBuffer
darf nicht verkettet sein. Das Feld „mNext“ sollte NULL sein. Wenn direkt nach diesem Aufruf zusätzliche Daten hinzugefügt werden, sollte das Flag OT_TCP_SEND_MORE_TO_COME als Hinweis für die TCP-Implementierung verwendet werden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
Informiert den Verbindungs-Peer, dass dieser TCP-Endpunkt keine weiteren Daten sendet.
Dieser Parameter sollte verwendet werden, wenn die Anwendung keine weiteren Daten zum Senden an den Verbindungs-Peer hat. Bei dieser Verbindung führen zukünftige Lesevorgänge auf dem Verbindungs-Peer zur Bedingung „Ende des Streams“ und zukünftige Schreibvorgänge auf diesem Verbindungsendpunkt schlagen fehl.
Die Bedingung „Ende des Streams“ wird nur angewendet, wenn alle zuvor an den TCP-Stack zum Senden bereitgestellten Daten vom Verbindungs-Peer empfangen wurden.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
Bewirkt, dass dieser TCP-Listener eingehende Verbindungen nicht mehr überwacht.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Makros
OT_TCP_ENDPOINT_TCB_NUM_PTR
OT_TCP_ENDPOINT_TCB_NUM_PTR 36
OT_TCP_ENDPOINT_TCB_SIZE_BASE
OT_TCP_ENDPOINT_TCB_SIZE_BASE 392
OT_TCP_ENDPOINT_TCB_SIZE_BASE und OT_TCP_ENDPOINT_TCB_NUM_POINTERS wurden so ausgewählt, dass das mTcb-Feld von otTcpEndpoint die gleiche Größe wie die Struktur tcpcb in TCPlp hat.
Das ist erforderlich, da das Feld „mTcb“ in der TCP-Implementierung als „Struct tcpcb“ behandelt wird, auch wenn es in seiner Deklaration undurchsichtig ist.
OT_TCP_LISTENER_TCB_NUM_PTR
OT_TCP_LISTENER_TCB_NUM_PTR 3
OT_TCP_LISTENER_TCB_SIZE_BASE
OT_TCP_LISTENER_TCB_SIZE_BASE 16
OT_TCP_LISTENER_TCB_SIZE_BASE und OT_TCP_LISTENER_TCB_NUM_POINTERS werden so ausgewählt, dass das mTcbListener-Feld von otTcpListener die gleiche Größe wie die Struktur tcpcb_listen in TCPlp hat.
Dies ist erforderlich, da das Feld „mTcbListen“, auch wenn es in seiner Deklaration nicht transparent ist, in der TCP-Implementierung als „Struct tcpcb“ behandelt wird.
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598
Empfohlene Puffergröße für TCP-Verbindungen, die ca. 3 Wireless-Hops oder weniger durchlaufen.
Auf Plattformen, auf denen der Speicher besonders begrenzt ist, und in Situationen, in denen keine hohe Bandbreite erforderlich ist, kann es sinnvoll sein, manuell eine kleinere Puffergröße auszuwählen.
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157
Empfohlene Puffergröße für TCP-Verbindungen, die viele WLAN-Hops durchlaufen.
Wenn die TCP-Verbindung eine sehr große Anzahl von Hops (mehr als 6 oder mehr) durchläuft, ist es möglicherweise ratsam, manuell eine große Puffergröße auszuwählen.
Ressourcen
OpenThread API-Referenzthemen stammen aus dem Quellcode, der auf GitHub verfügbar ist. Weitere Informationen finden Sie unter Ressourcen. Dort können Sie auch einen Beitrag zu unserer Dokumentation leisten.