NL::内网:: TCP端点

#include <src/inet/TCPEndPoint.h>

此类的对象表示 TCP 传输端点。

概括

Nest Inet 层封装了与 TCP 传输端点(Linux 和 BSD 派生系统上的 SOCK_STREAM 套接字)或 LwIP TCP 协议控制块交互的方法,因为系统已进行相应配置。

遗产

:从继承NL :: Inet电子:: EndPointBasis

公共类型

@10 {
kState_Ready = kBasisState_Closed,
kState_Bound = 1,
kState_Listening = 2,
kState_Connecting = 3,
kState_Connected = 4,
kState_SendShutdown = 5,
kState_ReceiveShutdown = 6,
kState_Closing = 7,
kState_Closed = 8
}
枚举
底层端点的基本动态状态。
OnAcceptErrorFunct )(TCPEndPoint *endPoint, INET_ERROR err)类型定义
void(*
连接接受错误事件处理函数的类型。
OnConnectCompleteFunct )(TCPEndPoint *endPoint, INET_ERROR err)类型定义
void(*
连接建立事件处理函数的类型。
OnConnectionClosedFunct )(TCPEndPoint *endPoint, INET_ERROR err)类型定义
void(*
连接建立事件处理函数的类型。
OnConnectionReceivedFunct )(TCPEndPoint *listeningEndPoint, TCPEndPoint *conEndPoint, const IPAddress &peerAddr, uint16_t peerPort)类型定义
void(*
连接类型接收事件处理函数。
OnDataReceivedFunct )(TCPEndPoint *endPoint, Weave::System::PacketBuffer *data)类型定义
void(*
数据接收事件处理函数的类型。
OnDataSentFunct )(TCPEndPoint *endPoint, uint16_t len)类型定义
void(*
数据传输事件处理函数的类型。
OnPeerCloseFunct )(TCPEndPoint *endPoint)类型定义
void(*
半关闭接收事件处理函数的类型。
OnTCPSendIdleChangedFunct )(TCPEndPoint *endPoint, bool isIdle)类型定义
void(*
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“保持活动”选项。
EnableNoDelay (void)
启用无延迟。
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
为 Connect 设置超时以成功或返回错误。
SetUserTimeout (uint32_t userTimeoutMillis)
设置 TCP TCP_USER_TIMEOUT 套接字选项。
Shutdown (void)
发起TCP half close,即发送完毕。

公共类型

@10

 @10

底层端点的基本动态状态。

对象在“就绪”状态下初始化,进入对应于 TCP 传输状态机状态简化的后续状态。

注: kBasisState_Closed状态枚举被映射到kState_Ready历史二进制兼容性的原因。现有kState_Closed存在单独列出,在先前存在之间“尚未开盘”和“先前打开已关闭”的区别kState_ReadykState_Closed状态。

特性
kState_Bound

端点绑定,但不监听。

kState_Closed

端点关闭,准备发布。

kState_Closing

端点双向关闭。

kState_Connected

端点已连接,准备好进行 tx/rx。

kState_Connecting

端点尝试连接。

kState_Listening

端点接收连接。

kState_Ready

端点已初始化,但未绑定。

kState_ReceiveShutdown

端点响应半关闭。

kState_SendShutdown

Endpoint 启动了它的半关闭。

OnAcceptErrorFunct

void(* OnAcceptErrorFunct)(TCPEndPoint *endPoint, INET_ERROR err)

连接接受错误事件处理函数的类型。

提供这种类型的的函数OnAcceptError委托件上的过程连接接受错误事件endPoint 。的err参数提供关于错误的类型的特定细节。

细节
参数
[in] endPoint
与事件关联的 TCP 端点。
[in] err
错误的原因。

OnConnectCompleteFunct

void(* OnConnectCompleteFunct)(TCPEndPoint *endPoint, INET_ERROR err)

连接建立事件处理函数的类型。

提供这种类型的函数OnConnectComplete代表成员来处理连接建立事件的endPoint 。该err参数区分失败成功连接。

细节
参数
[in] endPoint
与事件关联的 TCP 端点。
[in] err
INET_NO_ERROR如果成功,否则另一个代码。

OnConnectionClosedFunct

void(* OnConnectionClosedFunct)(TCPEndPoint *endPoint, INET_ERROR err)

连接建立事件处理函数的类型。

提供这种类型的的函数OnConnectionClosed委托件上的过程的连接终止事件endPoint 。该err参数区分故障成功终止。

细节
参数
[in] endPoint
与事件关联的 TCP 端点。
[in] err
INET_NO_ERROR如果成功,否则另一个代码。

OnConnectionReceivedFunct

void(* OnConnectionReceivedFunct)(TCPEndPoint *listeningEndPoint, TCPEndPoint *conEndPoint, const IPAddress &peerAddr, uint16_t peerPort)

连接类型接收事件处理函数。

提供这种类型的的函数OnConnectionReceived委托件上的过程连接接收事件listeningEndPoint 。新接收端点conEndPoint位于IP地址peerAddr和TCP端口peerPort

细节
参数
[in] listeningEndPoint
侦听 TCP 端点。
[in] conEndPoint
新收到的 TCP 端点。
[in] peerAddr
远程对等方的 IP 地址。
[in] peerPort
远程对等方的 TCP 端口。

OnDataReceivedFunct

void(* OnDataReceivedFunct)(TCPEndPoint *endPoint, Weave::System::PacketBuffer *data)

数据接收事件处理函数的类型。

提供这种类型的的函数OnDataReceived委托件上的过程的数据接收事件endPoint ,其中data是接收的消息的文本。

细节
参数
[in] endPoint
与事件关联的 TCP 端点。
[in] data
收到的数据。

一种数据接收事件处理程序必须承认使用处理后的数据AckReceive方法。的Free ,除非在数据缓冲方法也必须调用PutBackReceivedData来代替。

OnDataSentFunct

void(* OnDataSentFunct)(TCPEndPoint *endPoint, uint16_t len)

数据传输事件处理函数的类型。

提供这种类型的的函数OnDataSent委托件上的过程的数据传输事件endPoint ,其中len表示添加到TCP传输窗口的消息文本的长度,这有资格由底层网络栈发送。

细节
参数
[in] endPoint
与事件关联的 TCP 端点。
[in] len
添加到传输窗口的字节数。

OnPeerCloseFunct

void(* OnPeerCloseFunct)(TCPEndPoint *endPoint)

半关闭接收事件处理函数的类型。

提供这种类型的的函数OnPeerClose委托构件来处理连接终止事件endPoint

细节
参数
[in] endPoint
与事件关联的 TCP 端点。

OnTCPSendIdleChangedFunct

void(* OnTCPSendIdleChangedFunct)(TCPEndPoint *endPoint, bool isIdle)

TCP SendIdle 的类型改变了信号处理函数。

提供这种类型的函数来OnTCPSendIdleChanged委托部件来处理的发送信道的情况下TCPEndPoint被闲置,而不是空闲之间改变状态。

细节
参数
[in] endPoint
与事件关联的 TCP 端点。
[in] isIdle
如果 TCP 端点的发送通道为空闲,则为真,否则为假。

公共属性

接受错误

OnAcceptErrorFunct OnAcceptError

端点的连接接受事件处理函数委托。

连接完成

OnConnectCompleteFunct OnConnectComplete

端点的连接建立事件处理函数委托。

OnConnectionClosed

OnConnectionClosedFunct OnConnectionClosed

端点的关闭事件处理函数委托。

OnConnectionReceived

OnConnectionReceivedFunct OnConnectionReceived

端点的连接接收事件处理函数委托。

接收数据

OnDataReceivedFunct OnDataReceived

端点的消息文本接收事件处理函数委托。

发送数据

OnDataSentFunct OnDataSent

端点的消息文本传输事件处理函数委托。

点对点关闭

OnPeerCloseFunct OnPeerClose

端点的半关闭接收事件处理函数委托。

OnTCPSendIdleChanged

OnTCPSendIdleChangedFunct OnTCPSendIdleChanged

当TCP连接的发送通道空闲改变时,端点信令的事件处理函数委托。

上层利用这一点来根据发送的数据是否已可靠地交付给对等方采取适当的行动。

接收启用

bool ReceiveEnabled

指示应用程序是否正在接收数据的控制开关。

状态

enum nl::Inet::TCPEndPoint::@10 State

底层端点的基本动态状态。

对象在“就绪”状态下初始化,进入对应于 TCP 传输状态机状态简化的后续状态。

注: kBasisState_Closed状态枚举被映射到kState_Ready历史二进制兼容性的原因。现有kState_Closed存在单独列出,在先前存在之间“尚未开盘”和“先前打开已关闭”的区别kState_ReadykState_Closed状态。

公共职能

中止

void Abort(
  void
)

中止关闭端点,换句话说,发送 RST 数据包。

确认接收

INET_ERROR AckReceive(
  uint16_t len
)

确认收到消息文本。

使用此方法来确认接收到的全部或部分数据。如果操作语义是不确定的len大于总优秀未确认接收的数据大。

细节
参数
[in] len
要确认的字节数。
返回值
INET_NO_ERROR
成功:接收确认。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。
INET_ERROR_CONNECTION_ABORTED
TCP 连接不再打开。

绑定

INET_ERROR Bind(
  IPAddressType addrType,
  IPAddress addr,
  uint16_t port,
  bool reuseAddr
)

将端点绑定到接口 IP 地址。

将端点绑定到指定的网络接口 IP 地址。

细节
参数
[in] addrType
IP地址的协议版本
[in] addr
IP地址(必须是接口地址)
[in] port
TCP端口
[in] reuseAddr
与其他端点共享绑定的选项
返回值
INET_NO_ERROR
成功:端点绑定到地址
INET_ERROR_INCORRECT_STATE
端点之前已绑定
INET_NO_MEMORY
端点内存不足
INET_ERROR_WRONG_PROTOCOL_TYPE
addrType不匹配IPVer
INET_ERROR_WRONG_ADDRESS_TYPE
addrTypekIPAddressType_Any ,或类型addr不等于addrType
other
另一个系统或平台错误

在 LwIP 上,不得在已获取 LwIP 堆栈锁的情况下调用此方法。

关闭

INET_ERROR Close(
  void
)

发起 TCP 完全关闭,换句话说,发送和接收都完成。

细节
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。
other
另一个系统或平台错误

连接

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.

细节
参数
[in] addr
目标 IP 地址
[in] port
目的 TCP 端口
[in] intf
一个可选的网络接口指示器
返回值
INET_NO_ERROR
成功: msg排队等待发送。
INET_ERROR_NOT_IMPLEMENTED
系统实施未完成。
INET_ERROR_WRONG_ADDRESS_TYPE
目的地地址和绑定接口地址没有匹配的协议版本或地址类型,或目的地址是IPv6链路本地地址和intf没有被指定。
other
另一个系统或平台错误

禁用KeepAlive

INET_ERROR DisableKeepAlive(
  void
)

禁用 TCP“保持活动”选项。

TCPEndPoint :: DisableKeepAlive

在关联的 TCP 连接上禁用 TCP keepalive 探测。

细节
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。
INET_ERROR_CONNECTION_ABORTED
TCP 连接不再打开。
INET_ERROR_NOT_IMPLEMENTED
系统实施未完成。
other
另一个系统或平台错误

注:当端点处于连接状态中的一种此方法只能被调用。如果未在端点上启用 keepalive,则此方法不执行任何操作。

禁用接收

void DisableReceive(
  void
)

禁用接收。

禁用所有事件处理程序。发送到禁用接收的端点的数据将被确认,直到接收窗口用完。

启用KeepAlive

INET_ERROR EnableKeepAlive(
  uint16_t interval,
  uint16_t timeoutCount
)

启用 TCP“保持活动”选项。

TCPEndPoint :: EnableKeepAlive

自动开始传输TCP“保活”探头段每interval秒。该连接将接收的否定响应之后,或发送之后自动中止timeoutCount而不接收的肯定响应的探针片段。

细节
参数
[in] interval
探测请求之间的时间(以秒为单位)。
[in] timeoutCount
超时前要发送的探测数。
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。
INET_ERROR_CONNECTION_ABORTED
TCP 连接不再打开。
INET_ERROR_NOT_IMPLEMENTED
系统实施未完成。
other
另一个系统或平台错误

有关规范的详细信息,请参阅 RFC 1122 第 4.2.3.6 节。

在关联的 TCP 连接上启用 TCP keepalive 探测。

注:当端点处于连接状态中的一种此方法只能被调用。可以多次调用此方法来调整保活间隔或超时计数。

细节
参数
interval
保持活动探测之间的间隔(以秒为单位)。该值还控制发送最后一个数据包和第一个保活探测传输之间的时间。
timeoutCount
在连接将被视为失败之前的未确认探测的最大数量。

启用无延迟

INET_ERROR EnableNoDelay(
  void
)

启用无延迟。

TCPEndPoint :: EnableNoDelay

通过设置 TCP_NODELAY 套接字选项关闭 TCP 中的 nagle 缓冲算法。

启用接收

void EnableReceive(
  void
)

启用接收。

启用所有事件处理程序。发送到禁用接收的端点的数据将被确认,直到接收窗口用完。

自由

void Free(
  void
)

启动(或继续)TCP 完全关闭,忽略错误。

对象返回到空闲池,所有剩余的用户引用随后无效。

获取本地信息

INET_ERROR GetLocalInfo(
  IPAddress *retAddr,
  uint16_t *retPort
)

提取本地端点的 IP 地址和 TCP 端口。

不要使用NULL的任一参数指针值。

细节
参数
[out] retAddr
本地端点的 IP 地址。
[out] retPort
本地端点的 TCP 端口。
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。
INET_ERROR_CONNECTION_ABORTED
TCP 连接不再打开。

获取对等信息

INET_ERROR GetPeerInfo(
  IPAddress *retAddr,
  uint16_t *retPort
) const 

提取远程端点的 IP 地址和 TCP 端口。

不要使用NULL的任一参数指针值。

细节
参数
[out] retAddr
远程端点的 IP 地址。
[out] retPort
远程端点的 TCP 端口。
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。
INET_ERROR_CONNECTION_ABORTED
TCP 连接不再打开。

已连接

bool IsConnected(
  void
) const 

提取TCP连接是否建立。

INET_ERROR Listen(
  uint16_t backlog
)

准备端点以接收 TCP 消息。

如果State已经kState_Listening ,然后不进行任何操作,否则该State被设置为kState_Listening和端点准备接收的TCP报文,根据平台的语义。

细节
参数
[in] backlog
连接接受队列的最大深度
返回值
INET_NO_ERROR
成功:端点准备好接收消息。
INET_ERROR_INCORRECT_STATE
端点已经在监听。

在某些平台上,所述backlog参数不使用(队列的深度是固定的;只有一个连接可以一次被接受)。

在 LwIP 系统上,不得在已获取 LwIP 堆栈锁的情况下调用此方法

日志ID

uint16_t LogId(
  void
)

获取端点的标识符。

细节
退货
返回使用日志的不透明唯一标识符。

标记活动

void MarkActive(
  void
)

注意活动,换句话说,重置空闲计时器。

将空闲计时器重置为零。

等待接收长度

uint32_t PendingReceiveLength(
  void
)

提取未确认接收数据的长度。

细节
退货
在字节数的接收队列尚未被确认与AckReceive(uint16_t len)

等待发送长度

uint32_t PendingSendLength(
  void
)

提取等待首次传输的数据长度。

细节
退货
传输队列中未传输的字节数。

返回接收数据

INET_ERROR PutBackReceivedData(
  Weave::System::PacketBuffer *data
)

将消息文本推回到接收队列的头部。

此方法只能由数据接收事件处理程序调用,以将未确认的数据部分放回接收队列。操作语义是未定义如果呼叫者是一个数据接收事件处理程序的范围之外, data不是Weave::System::PacketBuffer提供给处理程序或data不包含后的剩余未确认部分中的字节通过确认之前调用AckReceive(uint16_t len)方法。

细节
参数
[out] data
要推送的消息文本。
返回值
INET_NO_ERROR
成功:接收确认。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。

发送

INET_ERROR Send(
  Weave::System::PacketBuffer *data,
  bool push
)

在 TCP 连接上发送消息文本。

Weave::System::PacketBuffer::Free方法被调用的data参数无论传输是否成功还是失败。

细节
参数
[out] data
要发送的消息文本。
[out] push
如果true ,则立即发送,否则队列。
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。

设置连接超时

void SetConnectTimeout(
  const uint32_t connTimeoutMsecs
)

为 Connect 设置超时以成功或返回错误。

细节
参数
[in] connTimeoutMsecs

设置用户超时

INET_ERROR SetUserTimeout(
  uint32_t userTimeoutMillis
)

设置 TCP TCP_USER_TIMEOUT 套接字选项。

TCPEndPoint :: SetUserTimeout

当该值大于 0 时,它指定传输数据在 TCP 强制关闭相应连接之前可能保持未确认状态的最长时间(以毫秒为单位)。如果选项值指定为 0,TCP 将使用系统默认值。有关更多详细信息,请参阅 RFC 5482。

细节
参数
[in] userTimeoutMillis
Tcp 用户超时值(以毫秒为单位)。
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_NOT_IMPLEMENTED
系统实施未完成。
other
另一个系统或平台错误

设置 TCP 用户超时套接字选项。

当该值大于 0 时,它指定传输数据在 TCP 强制关闭相应连接之前可能保持未确认状态的最长时间,以毫秒为单位。如果选项值指定为 0,TCP 将使用系统默认值。有关更多详细信息,请参阅 RFC 5482。

注:当端点处于连接状态中的一种此方法只能被调用。可以多次调用此方法来调整保活间隔或超时计数。

关掉

INET_ERROR Shutdown(
  void
)

发起TCP half close,即发送完毕。

细节
返回值
INET_NO_ERROR
成功:地址和端口提取。
INET_ERROR_INCORRECT_STATE
未建立 TCP 连接。
other
另一个系统或平台错误