nl::Inet::TCPEndPoint

#include <src/inet/TCPEndPoint.h>

這個類別的物件代表 TCP 傳輸端點。

摘要

Nest Inet Layer 會封裝與 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) typedef
void(*
連線接受錯誤事件處理函式的類型。
OnConnectCompleteFunct)(TCPEndPoint *endPoint, INET_ERROR err) typedef
void(*
連線建立事件處理函式的類型。
OnConnectionClosedFunct)(TCPEndPoint *endPoint, INET_ERROR err) typedef
void(*
連線建立事件處理函式的類型。
OnConnectionReceivedFunct)(TCPEndPoint *listeningEndPoint, TCPEndPoint *conEndPoint, const IPAddress &peerAddr, uint16_t peerPort) typedef
void(*
接收的連線所接收事件處理函式的類型。
OnDataReceivedFunct)(TCPEndPoint *endPoint, Weave::System::PacketBuffer *data) typedef
void(*
接收事件處理函式的類型。
OnDataSentFunct)(TCPEndPoint *endPoint, uint16_t len) typedef
void(*
資料傳輸事件處理函式的類型。
OnPeerCloseFunct)(TCPEndPoint *endPoint) typedef
void(*
半關閉接待事件處理函式的類型。
OnTCPSendIdleChangedFunct)(TCPEndPoint *endPoint, bool isIdle) typedef
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「保持運作」如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇
DisableReceive(void)
void
停用收訊功能。
EnableKeepAlive(uint16_t interval, uint16_t timeoutCount)
啟用 TCP「保持運作」如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇
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
取得端點的 ID。
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

底層端點的基本動態狀態。

物件會在「就緒」狀態中初始化然後繼續處理與簡化 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

端點已啟動一半的關閉。

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 方法確認已處理的資料。除非改用 PutBackReceivedData,否則也必須叫用資料緩衝區上的 Free 方法。

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 端點的傳送通道為閒置狀態,則為 True,否則為 false。

公開屬性

OnAcceptError

OnAcceptErrorFunct OnAcceptError

端點的連線接受事件處理函式委派。

OnConnectComplete

OnConnectCompleteFunct OnConnectComplete

端點的連線建立事件處理函式委派。

OnConnectionClosed

OnConnectionClosedFunct OnConnectionClosed

端點的關閉事件處理函式委派。

OnConnectionReceived

OnConnectionReceivedFunct OnConnectionReceived

端點的連線會接收事件處理函式委派。

OnDataReceived

OnDataReceivedFunct OnDataReceived

端點的訊息文字接收事件處理函式委派。

OnDataSent

OnDataSentFunct OnDataSent

端點的訊息文字傳輸事件處理函式委派。

OnPeerClose

OnPeerCloseFunct OnPeerClose

端點的半關閉方式接收事件處理函式委派。

OnTCPSendIdleChanged

OnTCPSendIdleChangedFunct OnTCPSendIdleChanged

TCP 連線傳送通道的閒置狀態變更時,端點傳送信號的事件處理函式委派。

為了讓傳送資料順利傳送至對等點,上層層會利用這些資料採取適當行動。

ReceiveEnabled

bool ReceiveEnabled

這個切換鈕指出應用程式是否正在接收資料。

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

底層端點的基本動態狀態。

物件會在「就緒」狀態中初始化然後繼續處理與簡化 TCP 傳輸狀態機器狀態相對應的後續狀態。

注意:基於過往的二進位檔相容性原因,kBasisState_Closed 狀態列舉會對應至 kState_Ready。現有的 kState_Closed 用於區分「尚未開啟」的不同之處以及「先前開啟過」 已關閉」之前存在於 kState_ReadykState_Closed 狀態下的存在。

公開函式

取消

void Abort(
  void
)

取消端點,也就是傳送 RST 封包。

AckReceive

INET_ERROR AckReceive(
  uint16_t len
)

確認收到訊息文字。

使用這個方法可確認接收到所有或部分的資料會順利接收。如果 len 大於尚未確認的已接收資料總數,則未定義作業語意。

詳細資料
參數
[in] len
要確認的位元組數
傳回值
INET_NO_ERROR
success:接受了接待。
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
其他系統或平台錯誤

DisableKeepAlive

INET_ERROR DisableKeepAlive(
  void
)

停用 TCP「保持運作」如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇

TCPEndPoint::DisableKeepAlive.

停用相關聯 TCP 連線的 TCP 保持運作探測。

詳細資料
傳回值
INET_NO_ERROR
成功:已擷取位址和通訊埠。
INET_ERROR_INCORRECT_STATE
未建立 TCP 連線。
INET_ERROR_CONNECTION_ABORTED
TCP 連線不再開放。
INET_ERROR_NOT_IMPLEMENTED
系統安裝作業未完成
other
其他系統或平台錯誤

注意:只有在端點處於其中一個連線狀態時,才能呼叫這個方法。 如未在端點上啟用保持運作,這個方法就不會執行任何動作。

DisableReceive

void DisableReceive(
  void
)

停用收訊功能。

停用所有事件處理常式。傳送至停用接收的端點的資料會經過確認,直到接收視窗用盡為止。

EnableKeepAlive

INET_ERROR EnableKeepAlive(
  uint16_t interval,
  uint16_t timeoutCount
)

啟用 TCP「保持運作」如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇

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 保持運作探測。

注意:只有在端點處於其中一個連線狀態時,才能呼叫這個方法。 可以多次呼叫此方法來調整保持運作間隔或逾時計數。

詳細資料
參數
interval
保持運作探測的間隔 (以秒為單位)。這個值也會控制從最後一項資料封包傳送到第一次保持運作探測之間的傳輸時間。
timeoutCount
判定連線失敗前的未確認探測次數上限。

EnableNoDelay

INET_ERROR EnableNoDelay(
  void
)

EnableNoDelay。

TCPEndPoint::EnableNoDelay

設定 TCP_NODELAY 通訊端選項,關閉 TCP 中的 Nagle 緩衝演算法。

EnableReceive

void EnableReceive(
  void
)

啟用收訊功能。

啟用所有事件處理常式。傳送至停用接收的端點的資料會經過確認,直到接收視窗用盡為止。

免費

void Free(
  void
)

啟動 (或繼續) TCP 完整關閉,並忽略錯誤。

物件會退回免費集區,而後續的所有使用者參照都會失效。

GetLocalInfo

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 連線不再開放。

GetPeerInfo

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 連線不再開放。

IsConnected

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 堆疊鎖定的情況下呼叫這個方法

LogId

uint16_t LogId(
  void
)

取得端點的 ID。

詳細資料
傳回
傳回使用記錄的不透明專屬 ID。

MarkActive

void MarkActive(
  void
)

請注意活動,也就是重設閒置計時器。

將閒置計時器重設為零。

PendingReceiveLength

uint32_t PendingReceiveLength(
  void
)

擷取未確認接收資料的長度。

詳細資料
傳回
接收佇列中尚未透過 AckReceive(uint16_t len) 確認的位元組數。

PendingSendLength

uint32_t PendingSendLength(
  void
)

擷取等待首次傳輸的資料長度。

詳細資料
傳回
傳送佇列中的未傳輸位元組數。

PutBackReceivedData

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

將訊息文字傳回接收佇列的標題。

這個方法只能由資料接收事件處理常式呼叫,將未確認的部分資料移回接收佇列。如果呼叫端不在資料接收事件處理常式的範圍內、data 不是提供給處理常式的 Weave::System::PacketBuffer,或 data 不包含在先前呼叫 AckReceive(uint16_t len) 方法所確認的位元組之後的剩餘未確認部分,作業語意便未定義。

詳細資料
參數
[out] data
要推送的訊息文字。
傳回值
INET_NO_ERROR
success:接受了接待。
INET_ERROR_INCORRECT_STATE
未建立 TCP 連線。

傳送

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

透過 TCP 連線傳送訊息。

無論傳輸成功或失敗,系統都會在 data 引數上呼叫 Weave::System::PacketBuffer::Free 方法。

詳細資料
參數
[out] data
要傳送的簡訊文字。
[out] push
如果值為 true,則立即傳送,否則立即排入佇列。
傳回值
INET_NO_ERROR
成功:已擷取位址和通訊埠。
INET_ERROR_INCORRECT_STATE
未建立 TCP 連線。

SetConnectTimeout

void SetConnectTimeout(
  const uint32_t connTimeoutMsecs
)

設定逾時,連線成功或傳回錯誤。

詳細資料
參數
[in] connTimeoutMsecs

SetUserTimeout

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,也就是結束傳送。

詳細資料
傳回值
INET_NO_ERROR
成功:已擷取位址和通訊埠。
INET_ERROR_INCORRECT_STATE
未建立 TCP 連線。
other
其他系統或平台錯誤