TCP
此模块包含用于控制 TCP 通信的函数。
总结
枚举 |
|
---|---|
anonymous enum
|
枚举 此枚举定义了传递给 otTcpConnect() 的标志。 |
anonymous enum
|
枚举 此枚举定义了传递给 otTcpSendByReference 的标志。 |
otTcpDisconnectedReason
|
枚举 |
otTcpIncomingConnectionAction{
|
枚举 此枚举定义了传入的连接操作。 |
类型定义符 |
|
---|---|
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 三向握手已完成,且连接现已建立。 |
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)
|
通知 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
此枚举定义了传递给 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 监听器相关联的上下文。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
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
。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
如何处理传入的连接。
|
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)。
详情 | |||||
---|---|---|---|---|---|
参数 |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
此结构包含 otTcpEndpointInitialize() 函数的参数。
otTcpBuilted
void(* otTcpEstablished)(otTcpEndpoint *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() 回调。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
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
表示接收缓冲区中剩余的用于存储剩余的数据容量。
详情 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
此回调用于通知应用,所提供的对等端已确认所提供的 aData
中的数据,并且应用可收回 aData
及其包含的数据。
aData
保证与通过 otTcpSendByReference() 传递到 TCP 的相同,包括通过 otTcpSendByExtension() 实现的所有扩展。
详情 | |||||
---|---|---|---|---|---|
参数 |
|
函数
TTCPAbort
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 )
通知 TCP 堆栈,应用在接收缓冲区开始时已处理完 aNumBytes
个字节的数据,且 TCP 堆栈无需继续在接收缓冲区中保留这些字节。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
OTT 工具连接
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
记录此连接的远程主机和端口。
默认使用 TCP Fast Open。也就是说,此函数只记录远程主机和端口,并且 TCP 连接建立握手仅在第一次调用 otTcpSendByReference() 时发生。TCP 快速打开可以使用 aFlags
显式停用,在这种情况下,TCP 连接建立握手会立即启动。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
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 的连接对等的主机和端口。 |
oTCPListen
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 接收缓冲区中当前的数据。
关联的缓冲区链将一直有效,直到下一次调用“receiveready”回调,或直到下次调用 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 堆栈所有;在将这些对象的所有权返回给应用之前,应用不得修改这些缓冲区和数据。调用此函数可以将另一个关联的缓冲区添加到发送队列,即使先前调用此函数的“send completed”回调尚未触发也是如此。
请注意,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 实现中被视为 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 上的源代码。 如需了解详情或为我们的文档做贡献,请参阅资源。