TCP
このモジュールには、TCP 通信を制御する関数が含まれています。
まとめ
列挙型 |
|
---|---|
anonymous enum
|
列挙型 この列挙型は、otTcpConnect() に渡されるフラグを定義します。 |
anonymous enum
|
列挙型 この列挙は、 otTcpSendByReference に渡されるフラグを定義します。 |
otTcpDisconnectedReason
|
列挙型 |
otTcpIncomingConnectionAction{
|
列挙型 この列挙は、受信接続アクションを定義します。 |
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 とそこに含まれるデータがアプリケーションによって回収される可能性があることをアプリケーションに通知します。 |
Functions |
|
---|---|
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() のコールバックで使用されます。
Properties | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
受信接続を承認します。 |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
受信接続を遅延(暗黙的に無視)します。 |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
受信接続を拒否する。 |
Typedef
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
TCP で使用するリンク先のバッファ構造。
単一の otLinkedBuffer は、mData と mLength でメモリ内のバイト配列を参照します。mNext フィールドは、otLinkedBuffer 構造のチェーンの形成に使用されます。
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
このコールバックは、TCP 接続の双方向通信が可能になったことを示します。
TCP Fast Open の場合、これは TCP 接続の handshake が実際に完了する前である可能性があります。アプリケーションには、接続を受け入れた TCP リスナーと接続先の TCP エンドポイントの両方のコンテキスト ポインタが提供されます。指定されたコンテキストは、TCP リスナーに関連付けられたコンテキストです。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
otTcpAcceptReady の使用
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
このコールバックは、この TCP リスナーに一致する受信接続が到着したことを示します。
通常、アプリケーションは受信方向の接続を受け入れます。これを行うには、aAcceptInto
に、受信接続の受け入れ先となる otTcpEndpoint へのポインタを入力します。この 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 のとき)で、もう 1 回は 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 種類のイベントに応じて呼び出されます。まず、送信バッファの「処理中」の領域が縮小される可能性があります(たとえば、前に送信したデータを受信者が確認したときなど)。次に、送信バッファの「バックログ」領域が縮小される可能性があります(たとえば、新しいデータが送信されました)。接続ピアからの ACK セグメントに応じて、これらの 2 つの条件が同時に発生し、それが 1 つのコールバックで結合される理由です。
TCP スタックは、送信バッファの末尾にある aInSendBuffer
バイトのみを使用します。aInSendBuffer
が x だけ減少した場合、以前は送信バッファの先頭だった x バイトが送信バッファの一部ではなくなり、アプリケーションによって再利用(すなわち上書き)できるようになります。otLinkedBuffer 構造自体は、参照するすべてのバイトが送信バッファに含まれなくなるまで再利用できます。
このコールバックは、次の意味で otTcpSendDone() を前提としています。aInSendBuffer
と、各リンクバッファ内のバイト数を比較することで、リンクされたバッファを再利用できるタイミングを判断できます。ただし、再利用できる otLinkedBuffers を直接伝達する otTcpSendDone() を使用すると、はるかに簡単に使用できます。両方のコールバックが登録され、同じイベント(例: 同じ ACK セグメントを受け取った)によってトリガーされた場合、otTcpSendDone() コールバックが最初にトリガーされ、その後このコールバックがトリガーされます。
また、このコールバックは aBacklog
を提供します。これは、送信バッファ内にまだバイト単位のデータがないことを示します。データが送信後すぐに届くことが保証されている場合にのみ、送信バッファにデータを追加するアプリケーションでは、aBacklog
が適切に小さい(0 または 0 に近い)場合にのみデータを送信することが望ましい場合があります。たとえば、アプリケーションで aBacklog
を使用すると、データのバックログが作成されないように、データをドロップまたは集約してキューアップに反応できます。
正のバイト数で otTcpSendByReference() または otTcpSendByExtension() を呼び出した後、otTcpForwardProgress() コールバックが呼び出され、送信バッファに追加されたバイトが送信されるタイミングを示します。otTcpForwardProgress() の呼び出しは、送信バッファにバイトが追加された直後(これらのバイトの一部が直ちに送信され、バックログを削減する場合)、または将来的に(接続がデータの一部またはすべてを送信した後でバックログを削減する場合)になることがあります。「すぐに」という意味では、コールバックはタスクレットでの実行が直ちにスケジュールされることを意味します。リエンタント関連の複雑さを回避するため、otTcpForwardByReference() 関数または otTcpSendByExtension() 関数から otTcpForwardProgress() コールバックが直接呼び出されることはありません。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
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
は、otTcpSendByReference() を通じて TCP に渡されるものと同一であることを保証します。これには、otTcpSendByExtension() を通じて適用される拡張機能も含まれます。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
Functions
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 が使用されます。つまり、この関数はリモートホストとポートを記録するのみで、TCP 接続の確立の handshake は otTcpSendByReference() の最初の呼び出しでのみ行われるということです。aFlags
を使用して TCP Fast Open を明示的に無効にすることができます。この場合、TCP 接続の確立の handshake は直ちに開始されます。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
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 受信バッファ内にあるデータを参照するリンク バッファ チェーンをアプリケーションに提供する。
リンク済みのバッファ チェーンは、次に「受信の準備完了」コールバックが呼び出されるまで、または次の 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 である必要があります。この呼び出しの直後にデータを追加する場合は、OT_TCP_SEND_MORE_TO_COME フラグを TCP 実装のヒントとして使用する必要があります。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
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 368
OT_TCP_ENDPOINT_TCB_SIZE_BASE と OT_TCP_ENDPOINT_TCB_NUM_POINTERS は、otTcpEndpoint の mTcb フィールドが TCPlp の構造体 tcpcb と同じサイズになるように選択されます。
この処理は必要です。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
OT_TCP_LISTENER_TCB_SIZE_BASE と OT_TCP_LISTENER_TCB_NUM_POINTERS は、otTcpListener の mTcbListener フィールドが TCPlp の構造体 tcpcb_listen と同じサイズになるように選択されます。
この処理は必要です。mTcbListen フィールドは宣言では不透明ですが、TCP 実装では構造体 tcpcb として扱われるためです。
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2599
約 3 つのワイヤレス ホップ以下の TCP 接続の推奨バッファサイズ。
メモリが特に制限されているプラットフォームや、高帯域幅を必要としない状況では、小さいバッファサイズを手動で選択することをおすすめします。
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4158
多数のワイヤレス ホップを通過する TCP 接続の推奨バッファサイズ。
TCP 接続が非常に多くのホップ(6 以上)を経由する場合は、手動で大きなバッファサイズを選択することをおすすめします。
リソース
OpenThread API リファレンスのトピックは、GitHub で入手可能なソースコードから作成されています。詳細やドキュメントについては、リソースをご覧ください。