透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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

端點的關閉事件處理函數委託。

接收到連接

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
另一個系統或平台錯誤