nl:: Inet:: TCPEndPoint
#include <src/inet/TCPEndPoint.h>
此类的对象表示 TCP 传输端点。
摘要
Nest Inet 层封装了与 TCP 传输端点(Linux 和 BSD 衍生系统上的 SOCK_STREAM 套接字)或 LwIP TCP 协议控制块进行交互的方法(如果系统进行了相应配置)。
继承
沿用自: nl::Inet::EndPointBasis
公共类型 |
|
---|---|
@10{
|
枚举 底层端点的基本动态状态。 |
OnAcceptErrorFunct)(TCPEndPoint *endPoint, INET_ERROR err)
|
typedefvoid(*
连接接受错误事件处理函数的类型。 |
OnConnectCompleteFunct)(TCPEndPoint *endPoint, INET_ERROR err)
|
typedefvoid(*
连接建立事件处理函数的类型。 |
OnConnectionClosedFunct)(TCPEndPoint *endPoint, INET_ERROR err)
|
typedefvoid(*
连接建立事件处理函数的类型。 |
OnConnectionReceivedFunct)(TCPEndPoint *listeningEndPoint, TCPEndPoint *conEndPoint, const IPAddress &peerAddr, uint16_t peerPort)
|
typedefvoid(*
连接接收事件处理函数的类型。 |
OnDataReceivedFunct)(TCPEndPoint *endPoint, Weave::System::PacketBuffer *data)
|
typedefvoid(*
数据接收事件处理函数的类型。 |
OnDataSentFunct)(TCPEndPoint *endPoint, uint16_t len)
|
typedefvoid(*
数据传输事件处理函数的类型。 |
OnPeerCloseFunct)(TCPEndPoint *endPoint)
|
typedefvoid(*
半关闭接收事件处理函数的类型。 |
OnTCPSendIdleChangedFunct)(TCPEndPoint *endPoint, bool isIdle)
|
typedefvoid(*
TCP SendIdle 更改的信号处理函数的类型。 |
公共属性 |
|
---|---|
OnAcceptError
|
端点的连接接受事件处理函数委托。
|
OnConnectComplete
|
端点的连接建立事件处理函数委托。
|
OnConnectionClosed
|
端点的关闭事件处理函数委托。
|
OnConnectionReceived
|
端点的连接接收事件处理函数委托。
|
OnDataReceived
|
端点的消息文本接收事件处理函数委托。
|
OnDataSent
|
端点的消息文本传输事件处理函数委托。
|
OnPeerClose
|
端点的半关闭接收事件处理函数委托。
|
OnTCPSendIdleChanged
|
当 TCP 连接的发送通道的空闲状态发生变化时,端点的事件处理函数委托会发出信号。
|
ReceiveEnabled
|
bool
用于指示应用是否在接收数据的控制开关。
|
State
|
enum nl::Inet::TCPEndPoint::@10
底层端点的基本动态状态。
|
公共函数 |
|
---|---|
Abort(void)
|
void
中止端点,即发送 RST 数据包。
|
AckReceive(uint16_t len)
|
确认收到消息文本。
|
Bind(IPAddressType addrType, IPAddress addr, uint16_t port, bool reuseAddr)
|
将端点绑定到接口 IP 地址。
|
Close(void)
|
发起 TCP 完全关闭,也就是在发送和接收过程中完成。
|
Connect(IPAddress addr, uint16_t port, InterfaceId intf)
|
启动 TCP 连接。
|
DisableKeepAlive(void)
|
停用 TCP“保持连接”选项。
|
DisableReceive(void)
|
void
停用接收。
|
EnableKeepAlive(uint16_t interval, uint16_t timeoutCount)
|
启用 TCP“keep-alive”选项。
|
EnableNoDelay(void)
|
EnableNoDelay。
|
EnableReceive(void)
|
void
启用接收。
|
Free(void)
|
void
启动(或继续)TCP 完全关闭,忽略错误。
|
GetLocalInfo(IPAddress *retAddr, uint16_t *retPort)
|
提取本地端点的 IP 地址和 TCP 端口。
|
GetPeerInfo(IPAddress *retAddr, uint16_t *retPort) const
|
提取远程端点的 IP 地址和 TCP 端口。
|
IsConnected(void) const
|
bool
了解是否已建立 TCP 连接。
|
Listen(uint16_t backlog)
|
准备端点以接收 TCP 消息。
|
LogId(void)
|
uint16_t
获取端点的标识符。
|
MarkActive(void)
|
void
记录活动,换句话说,重置空闲计时器。
|
PendingReceiveLength(void)
|
uint32_t
提取未确认的接收数据的长度。
|
PendingSendLength(void)
|
uint32_t
提取等待首次传输的数据的长度。
|
PutBackReceivedData(Weave::System::PacketBuffer *data)
|
将消息文本推送回接收队列的开头。
|
Send(Weave::System::PacketBuffer *data, bool push)
|
使用 TCP 连接时发送消息文本。
|
SetConnectTimeout(const uint32_t connTimeoutMsecs)
|
void
设置超时,以便连接成功或返回错误。
|
SetUserTimeout(uint32_t userTimeoutMillis)
|
设置 TCP TCP_USER_TIMEOUT 套接字选项。
|
Shutdown(void)
|
发起 TCP 半关闭操作,即完成发送。
|
公共类型
@10
@10
底层端点的基本动态状态。
对象在“ready”状态,则继续进行与 TCP 传输状态机状态简化对应的后续状态。
注意:由于历史二进制文件兼容性的原因,kBasisState_Closed
状态枚举会映射到 kState_Ready
。现有 kState_Closed
的存在是为了单独标识“尚未打开”和“尚未打开”之间的区别以及“之前现在打开过”
已关闭”之前处于 kState_Ready
和 kState_Closed
状态。
属性 | |
---|---|
kState_Bound
|
已绑定端点,但未监听。 |
kState_Closed
|
端点已关闭,准备发布。 |
kState_Closing
|
端点双向关闭。 |
kState_Connected
|
端点已连接,已准备好进行 tx/rx。 |
kState_Connecting
|
尝试连接的端点。 |
kState_Listening
|
接收连接的端点。 |
kState_Ready
|
端点已初始化,但未绑定。 |
kState_ReceiveShutdown
|
端点响应半关闭。 |
kState_SendShutdown
|
端点已启动半闭合。 |
OnAcceptErrorFunct
void(* OnAcceptErrorFunct)(TCPEndPoint *endPoint, INET_ERROR err)
连接接受错误事件处理函数的类型。
向 OnAcceptError
委托成员提供此类型的函数,以处理 endPoint
上的连接接受错误事件。err
参数提供有关错误类型的具体详细信息。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
OnConnectCompleteFunct
void(* OnConnectCompleteFunct)(TCPEndPoint *endPoint, INET_ERROR err)
连接建立事件处理函数的类型。
向 OnConnectComplete
委托成员提供此类型的函数,以处理 endPoint
上的连接建立事件。err
参数用于区分连接成功与失败。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
OnConnectionClosedFunct
void(* OnConnectionClosedFunct)(TCPEndPoint *endPoint, INET_ERROR err)
连接建立事件处理函数的类型。
向 OnConnectionClosed
委托成员提供此类型的函数,以处理 endPoint
上的连接终止事件。err
参数用于区分成功终止与失败。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
OnConnectionReceivedFunct
void(* OnConnectionReceivedFunct)(TCPEndPoint *listeningEndPoint, TCPEndPoint *conEndPoint, const IPAddress &peerAddr, uint16_t peerPort)
连接接收事件处理函数的类型。
向 OnConnectionReceived
委托成员提供此类型的函数,以处理 listeningEndPoint
上的连接接收事件。新收到的端点 conEndPoint
位于 IP 地址 peerAddr
和 TCP 端口 peerPort
。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
OnDataReceivedFunct
void(* OnDataReceivedFunct)(TCPEndPoint *endPoint, Weave::System::PacketBuffer *data)
数据接收事件处理函数的类型。
向 OnDataReceived
委托成员提供此类型的函数,以处理 endPoint
上的数据接收事件,其中 data
是收到的消息文本。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
数据接收事件处理脚本必须确认使用 AckReceive
方法处理的数据。除非改用 PutBackReceivedData
,否则还必须对数据缓冲区调用 Free
方法。
OnDataSentFunct
void(* OnDataSentFunct)(TCPEndPoint *endPoint, uint16_t len)
数据传输事件处理函数的类型。
向 OnDataSent
委托成员提供此类型的函数,以处理 endPoint
上的数据传输事件,其中 len
是添加到 TCP 传输窗口的消息文本的长度,可以由底层网络堆栈发送。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
OnPeerCloseFunct
void(* OnPeerCloseFunct)(TCPEndPoint *endPoint)
半关闭接收事件处理函数的类型。
向 OnPeerClose
委托成员提供此类型的函数,以处理 endPoint
上的连接终止事件。
详细信息 | |||
---|---|---|---|
参数 |
|
OnTCPSendIdleChangedFunct
void(* OnTCPSendIdleChangedFunct)(TCPEndPoint *endPoint, bool isIdle)
TCP SendIdle 更改的信号处理函数的类型。
向 OnTCPSendIdleChanged
委托成员提供此类型的函数,以处理 TCPEndPoint 的发送通道在空闲和非空闲状态之间变化的事件。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
公共属性
OnTCPSendIdleChanged
OnTCPSendIdleChangedFunct OnTCPSendIdleChanged
当 TCP 连接的发送通道的空闲状态发生变化时,端点的事件处理函数委托会发出信号。
上层利用此功能,根据发送的数据是否已可靠地传送到对等端,采取适当的操作。
ReceiveEnabled
bool ReceiveEnabled
用于指示应用是否在接收数据的控制开关。
州
enum nl::Inet::TCPEndPoint::@10 State
底层端点的基本动态状态。
对象在“ready”状态,则继续进行与 TCP 传输状态机状态简化对应的后续状态。
注意:由于历史二进制文件兼容性的原因,kBasisState_Closed
状态枚举会映射到 kState_Ready
。现有 kState_Closed
的存在是为了单独标识“尚未打开”和“尚未打开”之间的区别以及“之前现在打开过”
已关闭”之前处于 kState_Ready
和 kState_Closed
状态。
公共函数
中止
void Abort( void )
中止端点,即发送 RST 数据包。
AckReceive
INET_ERROR AckReceive( uint16_t len )
确认收到消息文本。
使用此方法确认已接收全部或部分数据。如果 len
大于未完成的未确认已接收数据总量,则操作语义未定义。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
绑定
INET_ERROR Bind( IPAddressType addrType, IPAddress addr, uint16_t port, bool reuseAddr )
将端点绑定到接口 IP 地址。
将端点绑定到指定的网络接口 IP 地址。
详细信息 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||||
返回值 |
|
在 LwIP 上,不得使用已获取的 LwIP 堆栈锁调用此方法。
关闭
INET_ERROR Close( void )
发起 TCP 完全关闭,也就是在发送和接收过程中完成。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
返回值 |
|
交流
INET_ERROR Connect( IPAddress addr, uint16_t port, InterfaceId intf )
启动 TCP 连接。
If possible, then this method initiates a TCP connection to the destination \c addr (with \c intf used as the scope identifier for IPv6 link-local destinations) and \c port.
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
DisableKeepAlive
INET_ERROR DisableKeepAlive( void )
停用 TCP“保持连接”选项。
TCPEndPoint::DisableKeepAlive.
在关联的 TCP 连接上停用 TCP keepalive 探测。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
返回值 |
|
注意:只有当端点处于某种连接状态时,才能调用此方法。 如果端点上未启用 keepalive,此方法不会执行任何操作。
DisableReceive
void DisableReceive( void )
停用接收。
停用所有事件处理脚本。发送到禁用接收的端点的数据将得到确认,直到接收窗口用尽。
EnableKeepAlive
INET_ERROR EnableKeepAlive( uint16_t interval, uint16_t timeoutCount )
启用 TCP“keep-alive”选项。
开始自动传输 TCP“保持连接”每 interval
秒检测一次探测段。在收到否定响应后,或发送了 timeoutCount
个探测段而没有收到肯定响应后,连接将自动取消。
详细信息 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||||
返回值 |
|
有关规范详情,请参阅 RFC 1122 第 4.2.3.6 节。
在关联的 TCP 连接上启用 TCP keepalive 探测。
注意:只有当端点处于某种连接状态时,才能调用此方法。 可以多次调用此方法来调整 keepalive 间隔或超时计数。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
EnableNoDelay
INET_ERROR EnableNoDelay( void )
EnableReceive
void EnableReceive( void )
启用接收。
启用所有事件处理脚本。发送到禁用接收的端点的数据将得到确认,直到接收窗口用尽。
免费
void Free( void )
启动(或继续)TCP 完全关闭,忽略错误。
对象会返回免费池,之后所有剩余的用户引用都将无效。
GetLocalInfo
INET_ERROR GetLocalInfo( IPAddress *retAddr, uint16_t *retPort )
提取本地端点的 IP 地址和 TCP 端口。
不要对其中任一参数使用 NULL
指针值。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
GetPeerInfo
INET_ERROR GetPeerInfo( IPAddress *retAddr, uint16_t *retPort ) const
提取远程端点的 IP 地址和 TCP 端口。
不要对其中任一参数使用 NULL
指针值。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
IsConnected
bool IsConnected( void ) const
了解是否已建立 TCP 连接。
收听
INET_ERROR Listen( uint16_t backlog )
准备端点以接收 TCP 消息。
如果 State
已经为 kState_Listening
,则不执行任何操作,否则 State
会设置为 kState_Listening
,并且端点会根据平台的语义准备好接收 TCP 消息。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
在某些平台上,不使用 backlog
参数(队列深度是固定的;一次只接受一个连接)。
在 LwIP 系统中,不得使用已获取的 LwIP 堆栈锁调用此方法
LogId
uint16_t LogId( void )
获取端点的标识符。
详细信息 | |
---|---|
返回值 |
返回使用日志的不透明唯一标识符。
|
MarkActive
void MarkActive( void )
记录活动,换句话说,重置空闲计时器。
将闲置计时器重置为零。
PendingReceiveLength
uint32_t PendingReceiveLength( void )
PendingSendLength
uint32_t PendingSendLength( void )
提取等待首次传输的数据的长度。
详细信息 | |
---|---|
返回值 |
传输队列中未传输的字节数。
|
PutBackReceivedData
INET_ERROR PutBackReceivedData( Weave::System::PacketBuffer *data )
将消息文本推送回接收队列的开头。
此方法只能由数据接收事件处理程序调用,以便将未确认的数据部分放回接收队列中。如果调用方在数据接收事件处理程序的范围之外,data
不是提供给处理程序的 Weave::System::PacketBuffer
,或者 data
不包含在之前调用 AckReceive(uint16_t len)
方法已确认的字节之后剩余的未确认部分,则操作语义未定义。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
发送
INET_ERROR Send( Weave::System::PacketBuffer *data, bool push )
使用 TCP 连接时发送消息文本。
无论传输成功还是失败,都会对 data
参数调用 Weave::System::PacketBuffer::Free
方法。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
SetConnectTimeout
void SetConnectTimeout( const uint32_t connTimeoutMsecs )
设置超时,以便连接成功或返回错误。
详细信息 | |||
---|---|---|---|
参数 |
|
SetUserTimeout
INET_ERROR SetUserTimeout( uint32_t userTimeoutMillis )
设置 TCP TCP_USER_TIMEOUT 套接字选项。
TCPEndPoint::SetUserTimeout 将用户超时。
当值大于 0 时,它指定了在 TCP 强制关闭相应连接之前传输的数据可以保持未确认状态的最长时间(以毫秒为单位)。如果选项值指定为 0,TCP 将使用系统默认值。如需了解更多详情,请参阅 RFC 5482。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
设置 TCP 用户超时套接字选项。
当该值大于 0 时,它指定了在 TCP 强制关闭相应连接之前传输的数据可以保持未确认状态的最长时间(以毫秒为单位)。如果选项值指定为 0,TCP 将使用系统默认值。如需了解更多详情,请参阅 RFC 5482。
注意:只有当端点处于某种连接状态时,才能调用此方法。 可以多次调用此方法来调整 keepalive 间隔或超时计数。
关停
INET_ERROR Shutdown( void )
发起 TCP 半关闭操作,即完成发送。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
返回值 |
|