Google 致力于为黑人社区推动种族平等。查看具体行动

TCP

此模块包含用于控制 TCP 通信的函数。

总结

枚举

anonymous enum 枚举
此枚举定义了传递给 otTcpConnect() 的标志。
anonymous enum 枚举
此枚举定义了传递给 otTcpSendByReference 的标志。
otTcpDisconnectedReason 枚举
otTcpIncomingConnectionAction{
  OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT,
  OT_TCP_INCOMING_CONNECTION_ACTION_DEFER,
  OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
}
枚举
此枚举定义了传入的连接操作。

类型定义符

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 三向握手已完成,且连接现已建立。
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)
通知 TCP 堆栈,应用在接收缓冲区开始时已处理完 aNumBytes 个字节的数据,且 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

otTcpReceivedConnectionAction

 otTcpIncomingConnectionAction

此枚举定义了传入的连接操作。

此方法在 otTcpAcceptReady() 回调中使用。

属性
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT

接受传入的连接。

OT_TCP_INCOMING_CONNECTION_ACTION_DEFER

推迟(静默地忽略)传入连接。

OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE

拒绝传入的连接。

类型定义符

otLinkedBuffer

struct otLinkedBuffer otLinkedBuffer

用于 TCP 的链接缓冲区结构。

单个 otLinkedBuffer 结构将通过 mData 和 mLength 引用内存中的字节数组。mNext 字段用于形成 otLinkedBuffer 结构链。

oTCPAcceptDone

void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)

此回调表示 TCP 连接现已可供双向通信。

对于 TCP 快速打开,这可能是在 TCP 连接握手实际完成之前。系统为接受连接的 TCP 监听器和接受协议的 TCP 端点提供该应用的上下文指针。所提供的上下文是与 TCP 监听器相关联的上下文。

详情
参数
[in] aListener
与传入连接匹配的 TCP 监听器。
[in] aEndpoint
接受传入连接的 TCP 端点。
[in] aPeer
传入连接的源主机和端口。

otTcpAcceptReady

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

此回调表示与此 TCP 监听器匹配的传入连接已到达。

典型的响应是应用接受传入的连接。为此,它会向 aAcceptInto 填充一个指向 otTcpEndpoint 的指针,以接受传入的连接。此 otTcpEndpoint 必须已使用 otTcpEndpointInitialize() 进行初始化。然后,应用返回 OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT。

或者,应用可以拒绝接受传入的连接。应用可通过两种方式完成此操作。首先,如果应用返回 OT_TCP_INCOMING_CONNECTION_ACTION_DEFER,则 OpenThread 将以静默方式忽略连接建立请求;连接对等方可能会重新传输请求,此时请求将再次调用回调。如果资源目前无法接受连接,这非常有用,但当连接对等方重新传输其连接建立尝试时,这些资源也许可用。其次,如果应用返回 OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE,OpenThread 就会向尝试建立连接的主机发送一条“connection refused”消息。如果应用拒绝传入连接,则无需填充 aAcceptInto

详情
参数
[in] aListener
与传入连接匹配的 TCP 监听器。
[in] aPeer
传入连接的源主机和端口。
[out] aAcceptInto
要在其中接受传入连接的 TCP 端点。
返回值
如何处理传入的连接。

otTcp 断开连接

void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)

此回调表示连接已中断且不应再使用,或者连接已进入 TIME-WAIT 状态。

如果连接建立尝试(通过调用 otTcpConnect() 发起)失败或此后的任意时间点出现(例如,如果连接超时或收到来自连接对等方的 RST 段),就可能会发生这种情况。触发此回调后,应用可以收回应用为此连接提供的所有资源(即它们引用的任何 otLinkedBuffers 和内存,但不包括 TCP 端点本身或接收缓冲区的空间)。如果连接进入 TIME-WAIT 状态,此回调会被调用两次,一次是进入 TIME-WAIT 状态(使用 OT_TCP_DISCONNECTED_REASON_TIME_WAIT),第二次是在 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() 函数的参数。

otTcpBuilted

void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)

此回调会通知应用 TCP 三向握手已完成,且连接现已建立。

详情
参数
[in] aEndpoint
现已建立连接的 TCP 端点。

otTcpForwardProgress

void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)

此回调用于告知应用,在将数据从发送缓冲区传输到接收者方面是否已经取得了进展。

正确实现 TCP 操作不需要使用此回调。大多数应用只需依赖 otTcpSendDone() 回调即可在 TCP 堆栈用完连接缓冲区后收回这些缓冲区。此回调的目的是支持高级应用,这些应用可以从有关连接在将数据传输到连接对等方时取得进展的更精细信息中受益。

此回调的操作与 TCP 的发送缓冲区密切相关。可以将发送缓冲区理解为具有两个区域。首先,发送缓冲区的头部(前面)有“传输中”区域。它与已发送给收件人但尚未确认的数据相对应。其次,“积压”区域包含发送缓冲区中不在“传输中”区域的所有数据。“待办”区域对应于排队等待发送但尚未发送的数据。

调用该回调来响应两种类型的事件。首先,发送缓冲区的“传输中”区域可能会收缩(例如,当接收者确认我们之前发送的数据时)。其次,发送缓冲区的“积压”区域可能会缩小(例如,新数据发出)。这两个条件通常会同时发生,以响应连接对等端的 ACK 细分,因此它们会合并到同一个回调中。

TCP 堆栈仅使用位于发送缓冲区末尾的 aInSendBuffer 字节;当 aInSendBuffer 减少一个数量 x 时,原先位于发送缓冲区头部的另外 x 个字节将不再是发送缓冲区的一部分,并且现在可以被应用收回(即覆盖)。请注意,只有当它所引用的所有字节不再是发送缓冲区的一部分时,才能回收 otLinkedBuffer 结构本身。

此回调在下列意义上依赖于 otTcpSendDone():应用可以通过将 aInSendBuffer 与每个链接缓冲区中的字节数进行比较来确定何时可以回收关联的缓冲区。不过,我们希望 otTcpSendDone()(可直接传达可回收哪些 otLinkedBuffer)的使用要简单得多。如果两个回调均已注册并由同一事件触发(例如,收到了相同的 ACK 片段),那么会先触发 otTcpSendDone() 回调,然后触发此回调。

此外,此回调提供 aBacklog,它指示发送缓冲区中尚未传输多少字节的数据。如果应用只想在保证很快发送数据的情况下向发送缓冲区添加数据,建议您仅在 aBacklog 适当小(0 或接近 0 时)才发送数据。例如,应用可以使用 aBacklog,以便通过丢弃或聚合数据来响应队列构建,以避免产生积压数据。

在调用 otTcpSendByReference()otTcpSendByExtension() 之后,系统会确保调用 otTcpForwardProgress() 回调,以表明添加到发送缓冲区的字节何时发送。可在字节添加到发送缓冲区后立即调用 otTcpForwardProgress()(如果其中一些字节立即发送出去,从而减少积压),或在未来的某个时间(在连接发出部分或全部数据后,减少积压)。“立即”是指回调已安排在 tasklet 中执行;为了避免与输入相关的复杂性,绝不能直接从 otTcpSendByReference()otTcpSendByExtension() 函数调用 otTcpForwardProgress() 回调。

详情
参数
[in] aEndpoint
连接的 TCP 端点。
[in] aInSendBuffer
发送缓冲区(传输中的“和”积压区域的总和)的字节数。
[in] aBacklog
待发送(但尚未发送)的字节数(积压区域)。

otTcpReceivedConnectionAction

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 保证与通过 otTcpSendByReference() 传递到 TCP 的相同,包括通过 otTcpSendByExtension() 实现的所有扩展。

详情
参数
[in] aEndpoint
连接的 TCP 端点。
[in] aData
指向可回收的 otLinkedBuffer 的指针。

函数

TTCPAbort

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
)

通知 TCP 堆栈,应用在接收缓冲区开始时已处理完 aNumBytes 个字节的数据,且 TCP 堆栈无需继续在接收缓冲区中保留这些字节。

详情
参数
[in] aEndpoint
指向 TCP 端点结构的指针,表示接收数据的 TCP 端点。
[in] aNumBytes
消耗的字节数。
[in] aFlags
用于指定此操作的选项的标记(尚未标记)。
返回值
OT_ERROR_NONE
已成功完成接收操作。
OT_ERROR_FAILED
未能完成接收操作。

OTT 工具连接

otError otTcpConnect(
  otTcpEndpoint *aEndpoint,
  const otSockAddr *aSockName,
  uint32_t aFlags
)

记录此连接的远程主机和端口。

默认使用 TCP Fast Open。也就是说,此函数只记录远程主机和端口,并且 TCP 连接建立握手仅在第一次调用 otTcpSendByReference() 时发生。TCP 快速打开可以使用 aFlags 显式停用,在这种情况下,TCP 连接建立握手会立即启动。

详情
参数
[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 的连接对等的主机和端口。

oTCPListen

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 接收缓冲区中当前的数据。

关联的缓冲区链将一直有效,直到下一次调用“receiveready”回调,或直到下次调用 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 堆栈所有;在将这些对象的所有权返回给应用之前,应用不得修改这些缓冲区和数据。调用此函数可以将另一个关联的缓冲区添加到发送队列,即使先前调用此函数的“send completed”回调尚未触发也是如此。

请注意,aBuffer 不应链接起来,其 mNext 字段应为 NULL。如果在调用之后立即添加更多数据,则应使用 OT_TCP_SEND_MORE_TO_COME 标志来提示 TCP 实现。

详情
参数
[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 368

选择 OT_TCP_ENDPOINT_TCB_SIZE_BASE 和 OT_TCP_ENDPOINT_TCB_NUM_POINTERS,使 otTcpEndpoint 的 mTcb 字段与 TCPlp 中的结构 tcpcb 字段大小相同。

这是必要的,因为 mTcb 字段虽然在声明中是不透明的,但在 TCP 实现中被视为 struct 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 上的源代码。 如需了解详情或为我们的文档做贡献,请参阅资源