TCP

このモジュールには、TCP 通信を制御する関数が含まれています。

概要

列挙型

anonymous enum enum
otTcpConnect() に渡されるフラグを定義します。
anonymous enum enum
otTcpSendByReference に渡されるフラグを定義します。
otTcpDisconnectedReason enum
otTcpIncomingConnectionAction{
  OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT,
  OT_TCP_INCOMING_CONNECTION_ACTION_DEFER,
  OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
}
enum
受信接続アクションを定義します。

Typedef

otLinkedBuffer typedef
TCP で使用するためにリンクされたバッファ構造。
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer) typedef
void(*
このコールバックは、TCP 接続で双方向通信の準備が整ったことを示します。
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto) typedef
このコールバックは、この TCP リスナーに一致する受信接続が到着したことを示します。
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason) typedef
void(*
このコールバックは、接続が切断されて使用すべきでないか、接続が TIME-WAIT 状態になったことを示します。
otTcpDisconnectedReason typedef
enum otTcpDisconnectedReason
otTcpEndpoint typedef
struct otTcpEndpoint
otTcpEndpointInitializeArgs typedef
otTcpEndpointInitialize() 関数への引数を格納します。
otTcpEstablished)(otTcpEndpoint *aEndpoint) typedef
void(*
このコールバックは、TCP 3-way handshake が完了して接続が確立したことをアプリケーションに通知します。
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog) typedef
void(*
このコールバックは、送信バッファから受信者へのデータ転送で転送が完了したかどうかをアプリケーションに通知します。
otTcpIncomingConnectionAction typedef
受信接続アクションを定義します。
otTcpListener typedef
struct otTcpListener
otTcpListenerInitializeArgs typedef
otTcpListenerInitialize() 関数への引数が含まれます。
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining) typedef
void(*
このコールバックは、受信バッファから消費できるバイト数を示します。
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData) typedef
void(*
このコールバックは、指定された 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

otTcpConnect() に渡されるフラグを定義します。

匿名列挙型

 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 リスナーに関連付けられているコンテキストです。

詳細
パラメータ
[in] aListener
受信接続に一致する TCP リスナー。
[in] aEndpoint
受信接続が受け入れられた TCP エンドポイント。
[in] aPeer
着信接続送信元のホストとポート。

otTcpAcceptReady

otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)

このコールバックは、この TCP リスナーに一致する受信接続が到着したことを示します。

一般的なレスポンスは、アプリケーションが受信接続を受け入れるというものです。受信接続を受け入れる otTcpEndpoint へのポインタを aAcceptInto に入力します。この otTcpEndpointotTcpEndpointInitialize() を使用して初期化しておく必要があります。その後、アプリケーションは OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT を返します。

または、アプリケーションが受信接続の受け入れを拒否することもできます。アプリケーションでこれを行うには 2 つの方法があります。まず、アプリケーションが OT_TCP_INCOMING_CONNECTION_ACTION_DEFER を返した場合、OpenThread は接続確立リクエストを通知せずに無視します。接続ピアはリクエストを再送信し、その時点でコールバックが再度呼び出されます。これは、接続を受け入れるためにリソースが現在利用できない場合でも、接続ピアが接続の確立の試行を再送するときに使用できる可能性がある場合に有用です。次に、アプリケーションが OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE を返すと、OpenThread は接続の確立を試みたホストに「接続拒否」メッセージを送信します。アプリケーションが受信接続を拒否した場合、aAcceptInto を入力する必要はありません。

詳細
パラメータ
[in] aListener
受信接続に一致する TCP リスナー。
[in] aPeer
接続の受信元のホストとポート。
[out] aAcceptInto
受信接続を受け入れる TCP エンドポイント。
戻り値
受信接続の処理方法の説明。

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 を使用)です。

詳細
パラメータ
[in] aEndpoint
接続が失われた TCP エンドポイント。
[in] aReason
接続が失われた理由。

otTcpDisconnectedReason

enum otTcpDisconnectedReason otTcpDisconnectedReason

otTcpEndpoint

struct otTcpEndpoint otTcpEndpoint

otTcpEndpointInitializeArgs

struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs

otTcpEndpointInitialize() 関数への引数を格納します。

otTcpEstablished

void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)

このコールバックは、TCP 3-way handshake が完了して接続が確立したことをアプリケーションに通知します。

詳細
パラメータ
[in] aEndpoint
接続が確立された TCP エンドポイント。

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() 関数から直接呼び出されることはありません。

詳細
パラメータ
[in] aEndpoint
接続の TCP エンドポイント。
[in] aInSendBuffer
送信バッファ内のバイト数(「処理中」と「バックログ」の領域の合計)。
[in] aBacklog
送信キューに追加されたが、まだ送信されていないバイト数(「バックログ」領域)。

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 は、到着する追加データを保持するための受信バッファに残りの容量を示します。

詳細
パラメータ
[in] aEndpoint
接続の TCP エンドポイント。
[in] aBytesAvailable
接続の受信バッファのバイト数。
[in] aEndOfStream
接続の受信バッファにすでに入っているデータ以外の追加データを受信できるかどうかを示します。
[in] aBytesRemaining
受信バッファがいっぱいになるまでに受信可能な追加バイト数。

otTcpSendDone

void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)

このコールバックは、指定された aData 内のデータが接続ピアによって確認応答済みであること、aData とその中にあるデータをアプリケーションが再利用できることを、アプリに通知します。

aData は、otTcpSendByExtension() を介して適用される拡張を含め、otTcpSendByReference() を介して TCP に渡されるものと同一であることが保証されます。

詳細
パラメータ
[in] aEndpoint
接続の TCP エンドポイント。
[in] aData
再利用できる otLinkedBuffer へのポインタ。

関数

otTcpAbort

otError otTcpAbort(
  otTcpEndpoint *aEndpoint
)

この TCP エンドポイントに関連付けられている TCP 接続を強制終了します。

これにより、TCP エンドポイントが直ちに別の接続に使用できるようになり、送受信バッファが空になり、otTcpSendByReference()otTcpSendByExtension() 呼び出しでアプリケーションが提供するデータの所有権がアプリケーションに戻されます。TCP エンドポイントのコールバックと受信バッファのメモリは、TCP エンドポイントに関連付けられたままになります。

詳細
パラメータ
[in] aEndpoint
中止する TCP エンドポイントを表す TCP エンドポイント構造へのポインタ。
戻り値
OT_ERROR_NONE
TCP エンドポイントの接続を中止しました。
OT_ERROR_FAILED
TCP エンドポイントの接続を中止できませんでした。

otTcpBind

otError otTcpBind(
  otTcpEndpoint *aEndpoint,
  const otSockAddr *aSockName
)

TCP エンドポイントを IP アドレスとポートにバインドします。

詳細
パラメータ
[in] aEndpoint
バインドする TCP エンドポイント構造へのポインタ。
[in] aSockName
この TCP エンドポイントをバインドするアドレスとポート。
戻り値
OT_ERROR_NONE
TCP エンドポイントを正常にバインドしました。
OT_ERROR_FAILED
TCP エンドポイントをバインドできませんでした。

otTcpCommitReceive

otError otTcpCommitReceive(
  otTcpEndpoint *aEndpoint,
  size_t aNumBytes,
  uint32_t aFlags
)

アプリケーションが受信バッファの開始時に aNumBytes バイトのデータの処理を完了したことと、TCP スタックが受信バッファでそのバイトを維持し続ける必要がないことを TCP スタックに通知します。

詳細
パラメータ
[in] aEndpoint
データを受信する TCP エンドポイントを表す TCP エンドポイント構造へのポインタ。
[in] aNumBytes
消費されたバイト数。
[in] aFlags
このオペレーションのオプションを指定するフラグ(まだなし)。
戻り値
OT_ERROR_NONE
受信オペレーションを完了しました。
OT_ERROR_FAILED
受信操作を完了できませんでした。

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 コールバックを待つ必要があります。

詳細
パラメータ
[in] aEndpoint
接続する TCP エンドポイント構造へのポインタ。
[in] aSockName
接続するホストの IP アドレスとポート。
[in] aFlags
この演算のオプションを指定するフラグ(上記の列挙を参照)。
戻り値
OT_ERROR_NONE
オペレーションを完了しました。
OT_ERROR_FAILED
操作を完了できませんでした。

otTcpEndpointDeinitialize

otError otTcpEndpointDeinitialize(
  otTcpEndpoint *aEndpoint
)

この TCP エンドポイントの初期化を解除します。

つまり、OpenThread は TCP エンドポイントの追跡を停止し、この TCP エンドポイントに内部的に割り当てられたすべてのリソースの割り当てを解除します。このアプリケーションは、TCP エンドポイントをサポートするメモリを必要に応じて再利用できます。

ライブ TCP 接続に対応する場合、接続は(otTcpAbort() のように)意図せず終了します。アプリケーションがこの TCP エンドポイント用に提供したすべてのリソース(送信バッファのリンクされたバッファ、受信バッファのメモリ、aEndpoint 構造体自体など)は、直ちにアプリケーションに返されます。

詳細
パラメータ
[in] aEndpoint
初期化を解除する TCP エンドポイント構造へのポインタ。
戻り値
OT_ERROR_NONE
TCP エンドポイントを正常に初期化しました。
OT_ERROR_FAILED
TCP エンドポイントを初期化できませんでした。

otTcpEndpointGetContext

void * otTcpEndpointGetContext(
  otTcpEndpoint *aEndpoint
)

初期化時に aEndpoint に関連付けられていたコンテキスト ポインタを取得します。

詳細
パラメータ
[in] aEndpoint
コンテキストを取得する TCP エンドポイント。
戻り値
aEndpoint に関連付けられたコンテキスト ポインタ。

otTcpEndpointGetInstance

otInstance * otTcpEndpointGetInstance(
  otTcpEndpoint *aEndpoint
)

初期化時に aEndpoint に関連付けられていた otInstance を取得します。

詳細
パラメータ
[in] aEndpoint
インスタンスを取得する TCP エンドポイント。
戻り値
aEndpoint に関連付けられた otInstance ポインタ。

otTcpEndpointInitialize

otError otTcpEndpointInitialize(
  otInstance *aInstance,
  otTcpEndpoint *aEndpoint,
  const otTcpEndpointInitializeArgs *aArgs
)

TCP エンドポイントを初期化します。

この関数を呼び出すと、OpenThread は TCP エンドポイントを追跡し、aEndpoint 内に TCP データを保存して取得します。アプリケーションは、aEndpoint のフィールドの直接アクセスや変更は避ける必要があります。アプリケーションで aEndpoint のメモリを再利用する必要がある場合は、otTcpEndpointDeinitialize() を呼び出す必要があります。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aEndpoint
TCP エンドポイント構造へのポインタ。
[in] aArgs
引数の構造へのポインタ。
戻り値
OT_ERROR_NONE
TCP エンドポイントを開きました。
OT_ERROR_FAILED
TCP エンドポイントを開けませんでした。

otTcpGetLocalAddress

const otSockAddr * otTcpGetLocalAddress(
  const otTcpEndpoint *aEndpoint
)

TCP エンドポイントのローカルホストとポートへのポインタを取得します。

このソケットが接続状態でなく、最後に切断されてからバインドされていない場合、ホストとポートの内容が古くなっている可能性があります。

詳細
パラメータ
[in] aEndpoint
取得するローカルホストとポートの TCP エンドポイント。
戻り値
aEndpoint のローカルホストとポート。

otTcpGetPeerAddress

const otSockAddr * otTcpGetPeerAddress(
  const otTcpEndpoint *aEndpoint
)

TCP エンドポイントのピアのホストとポートへのポインタを取得します。

このソケットが接続状態でない場合は、ホストとポートの内容が古くなっている可能性があります。

詳細
パラメータ
[in] aEndpoint
取得するピアのホストとポートの TCP エンドポイント。
戻り値
aEndpoint の接続ピアのホストとポート。

otTcpListen

otError otTcpListen(
  otTcpListener *aListener,
  const otSockAddr *aSockName
)

指定された IP アドレスとポートに一致する受信 TCP 接続が、この TCP リスナーのコールバックをトリガーします。

詳細
パラメータ
[in] aListener
リッスンを開始する TCP リスナー構造へのポインタ。
[in] aSockName
受信接続をリッスンするアドレスとポート。
戻り値
OT_ERROR_NONE
TCP リスナーのリッスンを開始しました。
OT_ERROR_FAILED
TCP リスナーのリッスンを開始できませんでした。

otTcpListenerDeinitialize

otError otTcpListenerDeinitialize(
  otTcpListener *aListener
)

この TCP リスナーを初期化します。

つまり、OpenThread は TCP リスナーの追跡を停止し、この TCP リスナーに内部的に割り当てられたすべてのリソースの割り当てを解除します。アプリケーションは、TCP リスナーをサポートするメモリを必要に応じて再利用できます。

TCP リスナーが現在リッスン中の場合、リッスンを停止します。

詳細
パラメータ
[in] aListener
初期化を解除する TCP リスナー構造へのポインタ。
戻り値
OT_ERROR_NONE
TCP リスナーが正常に初期化されました。
OT_ERROR_FAILED
TCP リスナーの初期化を解除できませんでした。

otTcpListenerGetContext

void * otTcpListenerGetContext(
  otTcpListener *aListener
)

初期化時に aListener に関連付けられていたコンテキスト ポインタを取得します。

詳細
パラメータ
[in] aListener
コンテキストを取得する TCP リスナー。
戻り値
aListener に関連付けられたコンテキスト ポインタ。

otTcpListenerGetInstance

otInstance * otTcpListenerGetInstance(
  otTcpListener *aListener
)

初期化時に aListener に関連付けられていた otInstance を取得します。

詳細
パラメータ
[in] aListener
インスタンスを取得する TCP リスナー。
戻り値
aListener に関連付けられた otInstance ポインタ。

otTcpListenerInitialize

otError otTcpListenerInitialize(
  otInstance *aInstance,
  otTcpListener *aListener,
  const otTcpListenerInitializeArgs *aArgs
)

TCP リスナーを初期化します。

この関数を呼び出すと、OpenThread が TCP リスナーを追跡し、aListener 内に TCP データを保存して取得します。アプリケーションは、aListener のフィールドの直接アクセスや変更は避ける必要があります。アプリケーションで aListener のメモリを再利用する必要がある場合は、otTcpListenerDeinitialize() を呼び出す必要があります。

詳細
パラメータ
[in] aInstance
OpenThread インスタンスへのポインタ。
[in] aListener
TCP リスナー構造へのポインタ。
[in] aArgs
引数の構造へのポインタ。
戻り値
OT_ERROR_NONE
TCP リスナーを開きました。
OT_ERROR_FAILED
TCP リスナーを開けませんでした。

otTcpReceiveByReference

otError otTcpReceiveByReference(
  otTcpEndpoint *aEndpoint,
  const otLinkedBuffer **aBuffer
)

現在 TCP 受信バッファにあるデータを参照する、リンクされたバッファ チェーンをアプリケーションに提供します。

リンクされたバッファ チェーンは、「receive ready」コールバックが次に呼び出されるまで、または次の otTcpReceiveContiguify() または otTcpCommitReceive() が呼び出されるまで有効です。

詳細
パラメータ
[in] aEndpoint
データを受信する TCP エンドポイントを表す TCP エンドポイント構造へのポインタ。
[out] aBuffer
現在受信バッファにあるデータを参照する、リンクされたバッファ チェーンへのポインタ。
戻り値
OT_ERROR_NONE
オペレーションを完了しました。
OT_ERROR_FAILED
操作を完了できませんでした。

otTcpReceiveContiguify

otError otTcpReceiveContiguify(
  otTcpEndpoint *aEndpoint
)

受信バッファがメモリ内で完全に連続するように再編成されます。

これはオプションです。アプリは、otTcpReceiveByReference を呼び出して取得したリンクされたバッファ チェーンを単に走査できます。アプリケーションによっては、この関数を呼び出してデータ処理を簡素化するために受信バッファを連続させたい場合がありますが、その場合は受信バッファ内のデータを再編成するための CPU 時間が犠牲になります。

詳細
パラメータ
[in] aEndpoint
再編成する受信バッファがある TCP エンドポイントへのポインタ。
戻り値
OT_ERROR_NONE
オペレーションを完了しました。
OT_ERROR_FAILED
操作を完了できませんでした。

otTcpSendByExtension

otError otTcpSendByExtension(
  otTcpEndpoint *aEndpoint,
  size_t aNumBytes,
  uint32_t aFlags
)

送信バッファの最後の otLinkedBuffer の長さを指定した分だけ拡張することで、送信バッファにデータを追加します。

送信バッファが空の場合、オペレーションは失敗します。

詳細
パラメータ
[in] aEndpoint
データを送信する TCP エンドポイントを表す TCP エンドポイント構造へのポインタ。
[in] aNumBytes
最終的にリンクされたバッファの長さを拡張するバイト数。
[in] aFlags
この演算のオプションを指定するフラグ(上記の列挙を参照)。
戻り値
OT_ERROR_NONE
送信バッファにデータが正常に追加されました。
OT_ERROR_FAILED
送信バッファにデータを追加できませんでした。

otTcpSendByReference

otError otTcpSendByReference(
  otTcpEndpoint *aEndpoint,
  otLinkedBuffer *aBuffer,
  uint32_t aFlags
)

aBuffer でポイントされるリンクされたバッファが参照するデータを送信バッファに追加します。

この関数の呼び出しが成功すると、リンクされたバッファとそれが参照するデータは、TCP スタックが所有します。「送信完了」コールバックがこれらのオブジェクトの所有権をアプリケーションに返すまで、アプリケーションはそれらを変更しないでください。この関数の前の呼び出しに対する「送信完了」コールバックがまだ呼び出されていない場合でも、この関数を呼び出して、別のリンクされたバッファを送信キューに追加できます。

aBuffer は連結しないでください。その mNext フィールドは NULL にする必要があります。この呼び出しの直後にデータを追加する場合は、TCP 実装のヒントとして OT_TCP_SEND_MORE_TO_COME フラグを使用する必要があります。

詳細
パラメータ
[in] aEndpoint
データを送信する TCP エンドポイントを表す TCP エンドポイント構造へのポインタ。
[in] aBuffer
送信バッファに追加するデータを参照する、リンクされたバッファ チェーンへのポインタ。
[in] aFlags
この演算のオプションを指定するフラグ(上記の列挙を参照)。
戻り値
OT_ERROR_NONE
送信バッファにデータが正常に追加されました。
OT_ERROR_FAILED
送信バッファにデータを追加できませんでした。

otTcpSendEndOfStream

otError otTcpSendEndOfStream(
  otTcpEndpoint *aEndpoint
)

この TCP エンドポイントがそれ以上データを送信しないことを接続ピアに通知します。

接続ピアに送信するデータがこれ以上ない場合に使用します。この接続では、接続ピアでの今後の読み取りは「ストリームの終了」状態となり、この接続エンドポイントでの今後の書き込みは失敗します。

「ストリームの終了」条件は、以前に TCP スタックに提供されて送られたデータが接続ピアによって受信された後にのみ適用されます。

詳細
パラメータ
[in] aEndpoint
シャットダウンする TCP エンドポイントを表す TCP エンドポイント構造へのポインタ。
戻り値
OT_ERROR_NONE
送信のために「ストリーム終了」条件をキューに登録しました。
OT_ERROR_FAILED
送信のために「ストリーム終了」条件をキューに追加できませんでした。

otTcpStopListening

otError otTcpStopListening(
  otTcpListener *aListener
)

この TCP リスナーで受信接続のリッスンを停止します。

詳細
パラメータ
[in] aListener
リッスンを停止する TCP リスナー構造へのポインタ。
戻り値
OT_ERROR_NONE
TCP リスナーのリッスンを停止しました。
OT_ERROR_FAILED
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 で入手できるソースコードに由来しています。 詳細について、またはドキュメントへの投稿については、リソースをご覧ください。