TCP
このモジュールには、TCP 通信を制御する関数が含まれています。
概要
列挙型 |
|
---|---|
anonymous enum
|
enum otTcpConnect() に渡されるフラグを定義します。 |
anonymous enum
|
enumotTcpSendByReference に渡されるフラグを定義します。 |
otTcpDisconnectedReason
|
enum |
otTcpIncomingConnectionAction{
|
enum 受信接続アクションを定義します。 |
Typedef |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
TCP で使用するためにリンクされたバッファ構造。 |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
このコールバックは、TCP 接続で双方向通信の準備が整ったことを示します。 |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef このコールバックは、この TCP リスナーに一致する受信接続が到着したことを示します。 |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
このコールバックは、接続が切断されて使用すべきでないか、接続が TIME-WAIT 状態になったことを示します。 |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
otTcpEndpointInitialize() 関数への引数を格納します。 |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
このコールバックは、TCP 3-way handshake が完了して接続が確立したことをアプリケーションに通知します。 |
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
|
typedefvoid(*
このコールバックは、送信バッファから受信者へのデータ転送で転送が完了したかどうかをアプリケーションに通知します。 |
otTcpIncomingConnectionAction
|
typedef 受信接続アクションを定義します。 |
otTcpListener
|
typedefstruct otTcpListener
|
otTcpListenerInitializeArgs
|
typedefstruct otTcpListenerInitializeArgs
otTcpListenerInitialize() 関数への引数が含まれます。 |
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
|
typedefvoid(*
このコールバックは、受信バッファから消費できるバイト数を示します。 |
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
|
typedefvoid(*
このコールバックは、指定された aData 内のデータが接続ピアによって確認応答済みであること、aData とその中にあるデータをアプリケーションが再利用できることを、アプリに通知します。 |
関数 |
|
---|---|
otTcpAbort(otTcpEndpoint *aEndpoint)
|
この TCP エンドポイントに関連付けられている TCP 接続を強制終了します。
|
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
|
TCP エンドポイントを IP アドレスとポートにバインドします。
|
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
アプリケーションが受信バッファの開始時に
aNumBytes バイトのデータの処理を完了したことと、TCP スタックが受信バッファでそのバイトを維持し続ける必要がないことを TCP スタックに通知します。 |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
この接続のリモートホストとポートを記録します。
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
この TCP エンドポイントの初期化を解除します。
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
初期化時に
aEndpoint に関連付けられていたコンテキスト ポインタを取得します。 |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
初期化時に
aEndpoint に関連付けられていた otInstance を取得します。 |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
TCP エンドポイントを初期化します。
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
TCP エンドポイントのローカルホストとポートへのポインタを取得します。
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
TCP エンドポイントのピアのホストとポートへのポインタを取得します。
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
指定された IP アドレスとポートに一致する受信 TCP 接続が、この TCP リスナーのコールバックをトリガーします。
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
この TCP リスナーを初期化します。
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
初期化時に
aListener に関連付けられていたコンテキスト ポインタを取得します。 |
otTcpListenerGetInstance(otTcpListener *aListener)
|
初期化時に
aListener に関連付けられていた otInstance を取得します。 |
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
|
TCP リスナーを初期化します。
|
otTcpReceiveByReference(otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
|
現在 TCP 受信バッファにあるデータを参照する、リンクされたバッファ チェーンをアプリケーションに提供します。
|
otTcpReceiveContiguify(otTcpEndpoint *aEndpoint)
|
受信バッファがメモリ内で完全に連続するように再編成されます。
|
otTcpSendByExtension(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
送信バッファの最後の otLinkedBuffer の長さを指定した分だけ拡張することで、送信バッファにデータを追加します。
|
otTcpSendByReference(otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
|
aBuffer でポイントされるリンクされたバッファが参照するデータを送信バッファに追加します。 |
otTcpSendEndOfStream(otTcpEndpoint *aEndpoint)
|
この TCP エンドポイントがそれ以上データを送信しないことを接続ピアに通知します。
|
otTcpStopListening(otTcpListener *aListener)
|
この TCP リスナーで受信接続のリッスンを停止します。
|
構造体 |
|
---|---|
otLinkedBuffer |
TCP で使用するためにリンクされたバッファ構造。 |
otTcpEndpoint |
TCP エンドポイントを表します。 |
otTcpEndpointInitializeArgs |
otTcpEndpointInitialize() 関数への引数を格納します。 |
otTcpListener |
TCP リスナーを表します。 |
otTcpListenerInitializeArgs |
otTcpListenerInitialize() 関数への引数が含まれます。 |
列挙型
匿名列挙型
anonymous enum
otTcpSendByReference
に渡されるフラグを定義します。
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
受信接続アクションを定義します。
これは otTcpAcceptReady() コールバックで使用します。
プロパティ | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
受信側の接続を受け入れます。 |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
受信接続を遅延します(通知せずに無視します)。 |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
受信接続を拒否します。 |
Typedef
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
TCP で使用するためにリンクされたバッファ構造。
1 つの otLinkedBuffer 構造体が、mData と mLength を使用してメモリ内のバイト配列を参照します。mNext フィールドは、otLinkedBuffer 構造体のチェーンを形成するために使用します。
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
このコールバックは、TCP 接続で双方向通信の準備が整ったことを示します。
TCP Fast Open の場合は、TCP 接続ハンドシェイクが実際に完了する前である可能性があります。アプリケーションには、接続を受け入れた TCP リスナーと受け入れ先の TCP エンドポイントの両方のコンテキスト ポインタが提供されます。提供されるコンテキストは、TCP リスナーに関連付けられているコンテキストです。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
このコールバックは、この TCP リスナーに一致する受信接続が到着したことを示します。
一般的なレスポンスは、アプリケーションが受信接続を受け入れるというものです。受信接続を受け入れる otTcpEndpoint へのポインタを aAcceptInto
に入力します。この otTcpEndpoint は otTcpEndpointInitialize() を使用して初期化しておく必要があります。その後、アプリケーションは OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT を返します。
または、アプリケーションが受信接続の受け入れを拒否することもできます。アプリケーションでこれを行うには 2 つの方法があります。まず、アプリケーションが OT_TCP_INCOMING_CONNECTION_ACTION_DEFER を返した場合、OpenThread は接続確立リクエストを通知せずに無視します。接続ピアはリクエストを再送信し、その時点でコールバックが再度呼び出されます。これは、接続を受け入れるためにリソースが現在利用できない場合でも、接続ピアが接続の確立の試行を再送するときに使用できる可能性がある場合に有用です。次に、アプリケーションが OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE を返すと、OpenThread は接続の確立を試みたホストに「接続拒否」メッセージを送信します。アプリケーションが受信接続を拒否した場合、aAcceptInto
を入力する必要はありません。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
受信接続の処理方法の説明。
|
otTcpDisconnected
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
このコールバックは、接続が切断されて使用すべきでないか、接続が TIME-WAIT 状態になったことを示します。
これは、(otTcpConnect() の呼び出しによって開始された)接続の確立の試行が失敗した場合、またはそれ以降の任意の時点で発生する可能性があります(接続がタイムアウトした場合、接続ピアから RST セグメントを受信した場合など)。このコールバックが起動すると、この接続用にアプリケーションが提供したすべてのリソース(TCP エンドポイント自体や受信バッファ用のスペースではなく、参照している otLinkedBuffers
とメモリ)を回収できます。接続が TIME-WAIT 状態になった場合、このコールバックは 2 回呼び出されます。1 回目は TIME-WAIT 状態に入るとき(OT_TCP_DISCONNECTED_REASON_TIME_WAIT を使用)、2 回目は TIME-WAIT 状態が終了したときに(OT_TCP_DISCONNECTED_REASON_NORMAL を使用)です。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
otTcpEndpointInitialize() 関数への引数を格納します。
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
このコールバックは、TCP 3-way handshake が完了して接続が確立したことをアプリケーションに通知します。
詳細 | |||
---|---|---|---|
パラメータ |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
このコールバックは、送信バッファから受信者へのデータ転送で転送が完了したかどうかをアプリケーションに通知します。
このコールバックは、正しい TCP オペレーションには必要ありません。ほとんどのアプリケーションは、TCP スタックによるリンクされたバッファの使用が完了すると、otTcpSendDone() コールバックのみを使用してリンクされたバッファを再利用できます。このコールバックの目的は、接続ピアへのデータ転送の進行状況について詳細な情報が得られる高度なアプリケーションをサポートすることです。
このコールバックのオペレーションは TCP の送信バッファと密接に関係しています。送信バッファには 2 つの領域があります。まず、送信バッファの先頭(前面)に「処理中」の領域があります。受信者に送信されたが、まだ確認応答されていないデータに対応しています。2 つ目は「バックログ」領域です。これは、「処理中」の領域にない送信バッファ内のすべてのデータで構成されます。「バックログ」領域は、送信のためにキューに追加されているものの、まだ送信されていないデータに対応します。
このコールバックは、2 種類のイベントに応答して呼び出されます。まず、送信バッファの「処理中」の領域が縮小される場合があります(先に送信したデータを受信者が確認した場合など)。次に、送信バッファの「バックログ」領域が縮小される場合があります(新しいデータが送信された場合など)。この 2 つの状態は、接続ピアからの ACK セグメントに応じて同時に発生することが多く、単一のコールバックに結合されているのはそのためです。
TCP スタックは、送信バッファの末尾の aInSendBuffer
バイトのみを使用します。aInSendBuffer
が量 x 減少すると、以前は送信バッファの先頭だった x 追加バイトが送信バッファの一部ではなくなり、アプリケーションで回収(上書き)できる状態になっています。otLinkedBuffer 構造自体は、参照するすべてのバイトが送信バッファの一部でなくなった後にのみ再利用できます。
このコールバックには otTcpSendDone() が組み込まれています。これは、aInSendBuffer
と、各リンクされたバッファ内のバイト数を比較することで、リンクされたバッファを再生できるタイミングをアプリケーションが判断できることを意味します。ただし、再利用できる otLinkedBuffers を直接伝える otTcpSendDone() を使用すると、はるかに簡単に使用できるようになります。両方のコールバックが登録され、同じイベントでトリガーされた場合(同じ ACK セグメントを受け取った場合など)、otTcpSendDone() コールバックが最初にトリガーされ、その後にこのコールバックがトリガーされます。
さらに、このコールバックは aBacklog
を提供します。これは、送信バッファ内のデータのうち、まだ送信されていないバイト数を示します。すぐに送信されることが確実な場合にのみ送信バッファにデータを追加するアプリケーションでは、aBacklog
が適度に小さい(0 または 0 に近い)場合にのみデータを送信することが望ましい場合があります。たとえば、アプリケーションで aBacklog
を使用すると、データのバックログの作成を回避するために、データをドロップまたは集約してキューのビルドアップに対応できます。
正のバイト数を指定して otTcpSendByReference() または otTcpSendByExtension() を呼び出した後は、送信バッファに追加されたバイトが送信されたタイミングを示すために、otTcpForwardProgress() コールバックが必ず呼び出されます。otTcpForwardProgress() の呼び出しは、バイトが送信バッファに追加された直後に(それらのバイトの一部が直ちに送信され、バックログを削減された場合)または将来の任意の時点で行われます(接続がデータの一部またはすべてを送信し、バックログが減少します)。「即時」とは、コールバックがタスクレット内ですぐに実行されるようスケジュールされることを意味します。再入院に関連する複雑さを回避するために、otTcpForwardProgress() コールバックは otTcpSendByReference() または otTcpSendByExtension() 関数から直接呼び出されることはありません。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
otTcpIncomingConnectionAction
enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction
受信接続アクションを定義します。
これは otTcpAcceptReady() コールバックで使用します。
otTcpListener
struct otTcpListener otTcpListener
otTcpListenerInitializeArgs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
otTcpListenerInitialize() 関数への引数が含まれます。
otTcpReceiveAvailable
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
このコールバックは、受信バッファから消費できるバイト数を示します。
このメソッドは、バイトが受信バッファに追加されるたびに、またストリームの最後に達したときに呼び出されます。ストリームの最後に到達した場合(つまり、接続ピアが書き込みのために接続の最後を閉じたために読み取り可能なデータがなくなる場合)、aEndOfStream
は true になります。最後に、aBytesRemaining
は、到着する追加データを保持するための受信バッファに残りの容量を示します。
詳細 | |||||||||
---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
このコールバックは、指定された aData
内のデータが接続ピアによって確認応答済みであること、aData
とその中にあるデータをアプリケーションが再利用できることを、アプリに通知します。
aData
は、otTcpSendByExtension() を介して適用される拡張を含め、otTcpSendByReference() を介して TCP に渡されるものと同一であることが保証されます。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
関数
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
この TCP エンドポイントに関連付けられている TCP 接続を強制終了します。
これにより、TCP エンドポイントが直ちに別の接続に使用できるようになり、送受信バッファが空になり、otTcpSendByReference() と otTcpSendByExtension() 呼び出しでアプリケーションが提供するデータの所有権がアプリケーションに戻されます。TCP エンドポイントのコールバックと受信バッファのメモリは、TCP エンドポイントに関連付けられたままになります。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
TCP エンドポイントを IP アドレスとポートにバインドします。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
アプリケーションが受信バッファの開始時に aNumBytes
バイトのデータの処理を完了したことと、TCP スタックが受信バッファでそのバイトを維持し続ける必要がないことを TCP スタックに通知します。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
この接続のリモートホストとポートを記録します。
TCP Fast Open は、aFlags
を使用して有効または無効にする必要があります。無効になっている場合、TCP 接続確立の handshake はすぐに開始されます。有効にすると、この関数はリモートホストとポートを記録するだけで、TCP 接続の確立の handshake は otTcpSendByReference()
への最初の呼び出しでのみ行われます。
TCP Fast Open が無効になっている場合、呼び出し元は、otTcpSendByReference()
の呼び出しなどでデータの送信を開始する前に、TCP 接続の確立のハンドシェイクが完了したことを示す otTcpEstablished
コールバックを待つ必要があります。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
この TCP エンドポイントの初期化を解除します。
つまり、OpenThread は TCP エンドポイントの追跡を停止し、この TCP エンドポイントに内部的に割り当てられたすべてのリソースの割り当てを解除します。このアプリケーションは、TCP エンドポイントをサポートするメモリを必要に応じて再利用できます。
ライブ TCP 接続に対応する場合、接続は(otTcpAbort() のように)意図せず終了します。アプリケーションがこの TCP エンドポイント用に提供したすべてのリソース(送信バッファのリンクされたバッファ、受信バッファのメモリ、aEndpoint
構造体自体など)は、直ちにアプリケーションに返されます。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
初期化時に aEndpoint
に関連付けられていたコンテキスト ポインタを取得します。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
aEndpoint に関連付けられたコンテキスト ポインタ。 |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
初期化時に aEndpoint
に関連付けられていた otInstance を取得します。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
aEndpoint に関連付けられた otInstance ポインタ。 |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
TCP エンドポイントを初期化します。
この関数を呼び出すと、OpenThread は TCP エンドポイントを追跡し、aEndpoint
内に TCP データを保存して取得します。アプリケーションは、aEndpoint
のフィールドの直接アクセスや変更は避ける必要があります。アプリケーションで aEndpoint
のメモリを再利用する必要がある場合は、otTcpEndpointDeinitialize() を呼び出す必要があります。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
TCP エンドポイントのローカルホストとポートへのポインタを取得します。
このソケットが接続状態でなく、最後に切断されてからバインドされていない場合、ホストとポートの内容が古くなっている可能性があります。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
aEndpoint のローカルホストとポート。 |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
TCP エンドポイントのピアのホストとポートへのポインタを取得します。
このソケットが接続状態でない場合は、ホストとポートの内容が古くなっている可能性があります。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
aEndpoint の接続ピアのホストとポート。 |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
指定された IP アドレスとポートに一致する受信 TCP 接続が、この TCP リスナーのコールバックをトリガーします。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
この TCP リスナーを初期化します。
つまり、OpenThread は TCP リスナーの追跡を停止し、この TCP リスナーに内部的に割り当てられたすべてのリソースの割り当てを解除します。アプリケーションは、TCP リスナーをサポートするメモリを必要に応じて再利用できます。
TCP リスナーが現在リッスン中の場合、リッスンを停止します。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
初期化時に aListener
に関連付けられていたコンテキスト ポインタを取得します。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
aListener に関連付けられたコンテキスト ポインタ。 |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
初期化時に aListener
に関連付けられていた otInstance を取得します。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
aListener に関連付けられた otInstance ポインタ。 |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
TCP リスナーを初期化します。
この関数を呼び出すと、OpenThread が TCP リスナーを追跡し、aListener
内に TCP データを保存して取得します。アプリケーションは、aListener
のフィールドの直接アクセスや変更は避ける必要があります。アプリケーションで aListener
のメモリを再利用する必要がある場合は、otTcpListenerDeinitialize() を呼び出す必要があります。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
現在 TCP 受信バッファにあるデータを参照する、リンクされたバッファ チェーンをアプリケーションに提供します。
リンクされたバッファ チェーンは、「receive ready」コールバックが次に呼び出されるまで、または次の otTcpReceiveContiguify() または otTcpCommitReceive() が呼び出されるまで有効です。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
受信バッファがメモリ内で完全に連続するように再編成されます。
これはオプションです。アプリは、otTcpReceiveByReference
を呼び出して取得したリンクされたバッファ チェーンを単に走査できます。アプリケーションによっては、この関数を呼び出してデータ処理を簡素化するために受信バッファを連続させたい場合がありますが、その場合は受信バッファ内のデータを再編成するための CPU 時間が犠牲になります。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpSendByExtension
otError otTcpSendByExtension( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
送信バッファの最後の otLinkedBuffer の長さを指定した分だけ拡張することで、送信バッファにデータを追加します。
送信バッファが空の場合、オペレーションは失敗します。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
otTcpSendByReference
otError otTcpSendByReference( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags )
aBuffer
でポイントされるリンクされたバッファが参照するデータを送信バッファに追加します。
この関数の呼び出しが成功すると、リンクされたバッファとそれが参照するデータは、TCP スタックが所有します。「送信完了」コールバックがこれらのオブジェクトの所有権をアプリケーションに返すまで、アプリケーションはそれらを変更しないでください。この関数の前の呼び出しに対する「送信完了」コールバックがまだ呼び出されていない場合でも、この関数を呼び出して、別のリンクされたバッファを送信キューに追加できます。
aBuffer
は連結しないでください。その mNext フィールドは NULL にする必要があります。この呼び出しの直後にデータを追加する場合は、TCP 実装のヒントとして OT_TCP_SEND_MORE_TO_COME フラグを使用する必要があります。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
この TCP エンドポイントがそれ以上データを送信しないことを接続ピアに通知します。
接続ピアに送信するデータがこれ以上ない場合に使用します。この接続では、接続ピアでの今後の読み取りは「ストリームの終了」状態となり、この接続エンドポイントでの今後の書き込みは失敗します。
「ストリームの終了」条件は、以前に TCP スタックに提供されて送られたデータが接続ピアによって受信された後にのみ適用されます。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
この TCP リスナーで受信接続のリッスンを停止します。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
||||
戻り値 |
|
マクロ
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
otTcpEndpoint の mTcb フィールドが TCPlp の struct tcpcb と同じサイズになるように、OT_TCP_ENDPOINT_TCB_SIZE_BASE と OT_TCP_ENDPOINT_TCB_NUM_POINTERS が選択されています。
これが必要なのは、mTcb フィールドは宣言では不透明ですが、TCP 実装では構造体 tcpcb として扱われるからです。
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
otTcpListener の mTcbListener フィールドが TCPlp の struct tcpcb_listen と同じサイズになるように、OT_TCP_LISTENER_TCB_SIZE_BASE と OT_TCP_LISTENER_TCB_NUM_POINTERS が選択されています。
これが必要なのは、mTcbListen フィールドは宣言では不透明ですが、TCP 実装では構造体 tcpcb として扱われるためです。
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598
走査するワイヤレス ホップが約 3 つ以下の TCP 接続に推奨されるバッファサイズ。
メモリに特に制約があるプラットフォームや、高帯域幅を必要としない状況では、手動で小さいバッファサイズを選択することが望ましい場合があります。
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157
多くのワイヤレス ホップを走査する TCP 接続に推奨されるバッファサイズ。
TCP 接続が非常に多くのホップ(6 超など)を通過する場合は、大きなバッファサイズを手動で選択することをおすすめします。
関連情報
OpenThread API リファレンスのトピックは、GitHub で入手できるソースコードに由来しています。 詳細について、またはドキュメントへの投稿については、リソースをご覧ください。