TCP
Mô-đun này bao gồm các hàm kiểm soát hoạt động giao tiếp TCP.
Tóm tắt
Bảng liệt kê |
|
---|---|
anonymous enum
|
enum Xác định cờ được truyền đến otTcpConnect(). |
anonymous enum
|
enum Xác định cờ được truyền đến otTcpSendByReference . |
otTcpDisconnectedReason
|
enum |
otTcpIncomingConnectionAction{
|
enum Xác định các thao tác kết nối đến. |
Typedef |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
Cấu trúc vùng đệm liên kết để sử dụng với TCP. |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
Lệnh gọi lại này cho biết kết nối TCP hiện đã sẵn sàng cho giao tiếp hai chiều. |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef Lệnh gọi lại này cho biết đã có kết nối đến khớp với trình nghe TCP này. |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
Lệnh gọi lại này cho biết kết nối đã bị hỏng và không còn được sử dụng nữa hoặc kết nối đã chuyển sang trạng thái THỜI GIAN CHỜ. |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
Chứa các đối số cho hàm otTcpEndpointInitialize(). |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
Lệnh gọi lại này thông báo cho ứng dụng rằng giao thức bắt tay 3 chiều của TCP đã hoàn tất và kết nối hiện đã được thiết lập. |
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
|
typedefvoid(*
Lệnh gọi lại này thông báo cho ứng dụng nếu đã có tiến trình chuyển tiếp trong quá trình chuyển dữ liệu từ vùng đệm gửi tới người nhận. |
otTcpIncomingConnectionAction
|
typedef Xác định các thao tác kết nối đến. |
otTcpListener
|
typedefstruct otTcpListener
|
otTcpListenerInitializeArgs
|
typedefstruct otTcpListenerInitializeArgs
Chứa các đối số cho hàm otTcpListenerInitialize(). |
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
|
typedefvoid(*
Lệnh gọi lại này cho biết số byte có thể sử dụng từ vùng đệm nhận. |
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
|
typedefvoid(*
Lệnh gọi lại này thông báo cho ứng dụng rằng dữ liệu trong aData mà bạn cung cấp đã được ứng dụng ngang hàng kết nối xác nhận, đồng thời ứng dụng có thể lấy lại aData cũng như dữ liệu trong đó. |
Hàm |
|
---|---|
otTcpAbort(otTcpEndpoint *aEndpoint)
|
Buộc kết thúc kết nối TCP liên kết với điểm cuối TCP này.
|
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
|
Liên kết điểm cuối TCP với một cổng và địa chỉ IP.
|
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Thông báo cho ngăn xếp TCP rằng ứng dụng đã xử lý xong
aNumBytes byte dữ liệu tại thời điểm bắt đầu vùng đệm nhận và ngăn xếp TCP không cần tiếp tục duy trì các byte đó trong vùng đệm nhận. |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
Ghi lại máy chủ lưu trữ từ xa và cổng cho kết nối này.
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
Huỷ khởi động điểm cuối TCP này.
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
Lấy con trỏ ngữ cảnh liên kết với
aEndpoint khi khởi chạy. |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
Lấy otInstance được liên kết với
aEndpoint khi khởi chạy. |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
Khởi động điểm cuối TCP.
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Lấy con trỏ đến máy chủ và cổng cục bộ của điểm cuối TCP.
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
Nhận con trỏ đến máy chủ và cổng của điểm cuối TCP.
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
Yêu cầu kết nối TCP đến khớp với cổng và địa chỉ IP đã chỉ định để kích hoạt lệnh gọi lại của trình nghe TCP này.
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
Huỷ khởi tạo trình nghe TCP này.
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
Lấy con trỏ ngữ cảnh liên kết với
aListener khi khởi chạy. |
otTcpListenerGetInstance(otTcpListener *aListener)
|
Lấy otInstance được liên kết với
aListener khi khởi chạy. |
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
|
Khởi động trình nghe TCP.
|
otTcpReceiveByReference(otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
|
Cung cấp cho ứng dụng một chuỗi vùng đệm liên kết tham chiếu dữ liệu hiện có trong vùng đệm nhận TCP.
|
otTcpReceiveContiguify(otTcpEndpoint *aEndpoint)
|
Sắp xếp lại vùng đệm nhận để hoàn toàn liền kề trong bộ nhớ.
|
otTcpSendByExtension(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
Thêm dữ liệu vào vùng đệm gửi bằng cách mở rộng độ dài của otLinkedBuffer cuối cùng trong vùng đệm gửi theo lượng được chỉ định.
|
otTcpSendByReference(otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
|
Thêm dữ liệu được vùng đệm liên kết do
aBuffer trỏ đến vào vùng đệm gửi. |
otTcpSendEndOfStream(otTcpEndpoint *aEndpoint)
|
Thông báo cho ứng dụng ngang hàng kết nối rằng điểm cuối TCP này sẽ không gửi thêm dữ liệu.
|
otTcpStopListening(otTcpListener *aListener)
|
Khiến trình nghe TCP này ngừng lắng nghe các kết nối đến.
|
Cấu trúc |
|
---|---|
otLinkedBuffer |
Cấu trúc vùng đệm liên kết để sử dụng với TCP. |
otTcpEndpoint |
Đại diện cho một điểm cuối TCP. |
otTcpEndpointInitializeArgs |
Chứa các đối số cho hàm otTcpEndpointInitialize(). |
otTcpListener |
Đại diện cho trình nghe TCP. |
otTcpListenerInitializeArgs |
Chứa các đối số cho hàm otTcpListenerInitialize(). |
Bảng liệt kê
enum ẩn danh
anonymous enum
Xác định cờ được truyền đến otTcpSendByReference
.
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
Xác định các thao tác kết nối đến.
Giá trị này được dùng trong lệnh gọi lại otTcpAcceptReady().
Thuộc tính | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
Chấp nhận kết nối đến. |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
Trì hoãn (tắt tiếng bỏ qua) kết nối đến. |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
Từ chối kết nối đến. |
Typedef
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
Cấu trúc vùng đệm liên kết để sử dụng với TCP.
Một cấu trúc otLinkedBuffer duy nhất tham chiếu một mảng byte trong bộ nhớ, thông qua mData và mLength. Trường mNext dùng để tạo chuỗi cấu trúc otLinkedBuffer.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
Lệnh gọi lại này cho biết kết nối TCP hiện đã sẵn sàng cho giao tiếp hai chiều.
Trong trường hợp TCP Nhanh Open, có thể xảy ra trước khi quá trình bắt tay kết nối TCP thực sự hoàn tất. Ứng dụng được cung cấp kèm theo con trỏ ngữ cảnh cho cả trình nghe TCP đã chấp nhận kết nối lẫn điểm cuối TCP mà trình nghe này được chấp nhận. Ngữ cảnh được cung cấp là ngữ cảnh liên quan đến trình nghe TCP.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
Lệnh gọi lại này cho biết đã có kết nối đến khớp với trình nghe TCP này.
Thông thường, phản hồi là để ứng dụng chấp nhận kết nối đến. Tính năng này làm như vậy bằng cách điền aAcceptInto
con trỏ đến otTcpEndpoint để chấp nhận kết nối đến. otTcpEndpoint này phải được khởi động bằng otTcpEndpointInitialize(). Sau đó, ứng dụng sẽ trả về OT_TCP_INCOMING_CONNECTION_ACTION_AVAILABLE.
Ngoài ra, ứng dụng có thể từ chối chấp nhận kết nối đến. Có hai cách để ứng dụng làm điều này. Trước tiên, nếu ứng dụng trả về OT_TCP_INCOMING_CONNECTION_ACTION_DEFER, thì OpenThread tự động bỏ qua yêu cầu thiết lập kết nối; ứng dụng ngang hàng kết nối có thể sẽ truyền lại yêu cầu, lúc đó lệnh gọi lại sẽ được gọi lại. Điều này rất hữu ích nếu hiện chưa có tài nguyên để chấp nhận kết nối, nhưng các tài nguyên này có thể sử dụng được khi ứng dụng ngang hàng kết nối truyền lại nỗ lực thiết lập kết nối. Thứ hai, nếu ứng dụng trả về OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE, thì OpenThread sẽ gửi thông báo "kết nối bị từ chối" đến máy chủ đã cố gắng thiết lập kết nối. Nếu ứng dụng từ chối kết nối đến thì bạn không cần điền vào aAcceptInto
.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
||||||
Trả về |
Mô tả cách xử lý kết nối đến.
|
otTcpDisconnected
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
Lệnh gọi lại này cho biết kết nối đã bị hỏng và không còn được sử dụng nữa hoặc kết nối đã chuyển sang trạng thái THỜI GIAN CHỜ.
Lỗi này có thể xảy ra nếu nỗ lực thiết lập kết nối (được khởi tạo bằng cách gọi otTcpConnect()) không thành công, hoặc bất kỳ thời điểm nào sau đó (ví dụ: nếu kết nối hết thời gian hoặc một phân đoạn RST nhận được từ ứng dụng ngang hàng kết nối). Sau khi lệnh gọi lại này kích hoạt, tất cả tài nguyên mà ứng dụng đã cung cấp cho kết nối này (tức là mọi otLinkedBuffers
và bộ nhớ mà chúng tham chiếu đến, ngoại trừ chính điểm cuối TCP hoặc không gian dành cho vùng đệm nhận) đều có thể được thu hồi. Trong trường hợp kết nối chuyển sang trạng thái THỜI GIAN CHỜ nữa, lệnh gọi lại này sẽ được gọi hai lần, một lần khi chuyển sang trạng thái THỜI GIAN CHỜ (OT_TCP_DISCONNECTED_REASON_TIME_USERS và lần nữa khi trạng thái Thời gian chờ hết hạn (với OT_TCP_DISCONNECTED_REASON_NORMAL).
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
Chứa các đối số cho hàm otTcpEndpointInitialize().
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
Lệnh gọi lại này thông báo cho ứng dụng rằng giao thức bắt tay 3 chiều của TCP đã hoàn tất và kết nối hiện đã được thiết lập.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
Lệnh gọi lại này thông báo cho ứng dụng nếu đã có tiến trình chuyển tiếp trong quá trình chuyển dữ liệu từ vùng đệm gửi tới người nhận.
Không cần lệnh gọi lại này cho thao tác TCP đúng. Hầu hết ứng dụng chỉ cần dựa vào lệnh gọi lại otTcpSendDone() để lấy lại các vùng đệm đã liên kết sau khi ngăn xếp TCP hoàn tất bằng cách sử dụng các vùng đệm đó. Mục đích của lệnh gọi lại này là để hỗ trợ các ứng dụng nâng cao hưởng lợi từ thông tin chi tiết hơn về cách kết nối đang giúp chuyển dữ liệu sang ứng dụng ngang hàng kết nối.
Hoạt động của lệnh gọi lại này gắn liền với vùng đệm gửi của TCP. Vùng đệm gửi có thể được hiểu là có hai vùng. Đầu tiên, có vùng "đang diễn ra" ở đầu (phía trước) của vùng đệm gửi. Dữ liệu này tương ứng với dữ liệu đã được gửi đến người nhận nhưng chưa được xác nhận. Thứ hai, có khu vực "chưa thực hiện" bao gồm tất cả dữ liệu trong bộ đệm gửi không nằm trong khu vực "đang diễn ra". Khu vực "tồn đọng" tương ứng với dữ liệu đã được xếp hàng để gửi nhưng chưa được gửi.
Lệnh gọi lại được gọi để phản hồi 2 loại sự kiện. Thứ nhất, vùng "đang diễn ra" của vùng đệm gửi có thể thu nhỏ (ví dụ: khi người nhận xác nhận dữ liệu mà chúng ta đã gửi trước đó). Thứ hai, vùng "tồn đọng" của vùng đệm gửi có thể thu nhỏ (ví dụ: khi dữ liệu mới được gửi đi). 2 điều kiện này thường xảy ra cùng một lúc để phản hồi một phân đoạn ACK từ ứng dụng ngang hàng kết nối. Đó là lý do chúng được kết hợp trong một lệnh gọi lại duy nhất.
Ngăn xếp TCP chỉ sử dụng các byte aInSendBuffer
ở cuối vùng đệm gửi; khi aInSendBuffer
giảm đi một lượng x, điều đó có nghĩa là x byte bổ sung trước đây ở đầu vùng đệm gửi không còn là một phần của vùng đệm gửi và hiện có thể được ứng dụng lấy lại (tức là bị ghi đè). Xin lưu ý rằng bản thân cấu trúc otLinkedBuffer chỉ có thể được xác nhận lại sau khi tất cả các byte mà nó tham chiếu không còn là một phần của vùng đệm gửi.
Lệnh gọi lại này phụ otTcpSendDone() theo ý sau: ứng dụng có thể xác định thời điểm có thể thu hồi vùng đệm liên kết bằng cách so sánh aInSendBuffer
với số byte trong mỗi vùng đệm đã liên kết. Tuy nhiên, chúng tôi dự kiến rằng otTcpSendDone() trực tiếp truyền tải việc sử dụng otLinkedBuffers có thể đơn giản hơn nhiều. Nếu cả hai lệnh gọi lại đều được đăng ký và được kích hoạt bởi cùng một sự kiện (ví dụ: cùng một phân đoạn ACK nhận được), thì lệnh gọi lại otTcpSendDone() sẽ được kích hoạt trước tiên, sau đó là lệnh gọi lại này.
Ngoài ra, lệnh gọi lại này còn cung cấp aBacklog
để cho biết có bao nhiêu byte dữ liệu trong vùng đệm gửi chưa được chuyển. Đối với các ứng dụng chỉ muốn thêm dữ liệu vào vùng đệm gửi khi có thể đảm bảo rằng dữ liệu sẽ sớm được gửi đi, bạn chỉ nên gửi dữ liệu khi aBacklog
có kích thước phù hợp (0 hoặc gần bằng 0). Ví dụ: một ứng dụng có thể sử dụng aBacklog
để có thể phản ứng với tình trạng tích luỹ hàng đợi bằng cách xoá hoặc tổng hợp dữ liệu để tránh tạo ra dữ liệu tồn đọng.
Sau khi gọi otTcpSendByReference() hoặc otTcpSendByExtension() có số lượng byte lớn, lệnh gọi lại otTcpForwardProgress() được đảm bảo sẽ được gọi để cho biết thời điểm gửi đi các byte đã được thêm vào vùng đệm gửi. Lệnh gọi otTcpForwardProgress() có thể được thực hiện ngay sau khi các byte được thêm vào vùng đệm gửi (nếu một số byte trong số đó được gửi ngay lập tức, giảm phần chưa thực hiện) hoặc vào một thời điểm nào đó trong tương lai (khi kết nối đã gửi một số hoặc tất cả dữ liệu, giúp giảm phần chưa thực hiện). "Ngay lập tức", chúng tôi có nghĩa là lệnh gọi lại được lên lịch ngay để thực thi trong một tác vụ. Để tránh phức tạp liên quan đến việc truy xuất lại, lệnh gọi lại otTcpForwardProgress() không bao giờ được gọi trực tiếp từ các hàm otTcpSendByReference() hoặc otTcpSendByExtension().
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
otTcpIncomingConnectionAction
enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction
Xác định các thao tác kết nối đến.
Giá trị này được dùng trong lệnh gọi lại otTcpAcceptReady().
otTcpListener
struct otTcpListener otTcpListener
otTcpListenerInitializeArgs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
Chứa các đối số cho hàm otTcpListenerInitialize().
otTcpReceiveAvailable
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
Lệnh gọi lại này cho biết số byte có thể sử dụng từ vùng đệm nhận.
Phương thức này được gọi bất cứ khi nào các byte được thêm vào vùng đệm nhận và khi đến cuối luồng. Nếu đã đến cuối luồng (tức là không có thêm dữ liệu để đọc vì ứng dụng ngang hàng kết nối đã đóng đầu kết nối để ghi), thì aEndOfStream
là đúng. Cuối cùng, aBytesRemaining
cho biết dung lượng còn lại trong vùng đệm nhận để lưu giữ dữ liệu bổ sung đến.
Thông tin chi tiết | |||||||||
---|---|---|---|---|---|---|---|---|---|
Thông số |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
Lệnh gọi lại này thông báo cho ứng dụng rằng dữ liệu trong aData
mà bạn cung cấp đã được ứng dụng ngang hàng kết nối xác nhận, đồng thời ứng dụng có thể lấy lại aData
cũng như dữ liệu trong đó.
aData
được đảm bảo giống hệt với otTcpSendByReference(), bao gồm mọi phần mở rộng được thực hiện thông qua otTcpSendByExtension().
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
Hàm
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
Buộc kết thúc kết nối TCP liên kết với điểm cuối TCP này.
Thao tác này ngay lập tức giúp cho điểm cuối TCP sử dụng miễn phí cho kết nối khác và sẽ dọn sạch vùng đệm gửi và nhận, chuyển quyền sở hữu mọi dữ liệu do ứng dụng cung cấp trong các lệnh gọi otTcpSendByReference() và otTcpSendByExtension() quay lại ứng dụng. Các lệnh gọi lại và bộ nhớ của điểm cuối TCP cho vùng đệm nhận vẫn được liên kết với điểm cuối TCP.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
Liên kết điểm cuối TCP với một cổng và địa chỉ IP.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Thông báo cho ngăn xếp TCP rằng ứng dụng đã xử lý xong aNumBytes
byte dữ liệu tại thời điểm bắt đầu vùng đệm nhận và ngăn xếp TCP không cần tiếp tục duy trì các byte đó trong vùng đệm nhận.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
||||||
Giá trị trả về |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
Ghi lại máy chủ lưu trữ từ xa và cổng cho kết nối này.
Bạn phải bật hoặc tắt TCP Fast Open bằng aFlags
. Nếu bạn tắt chính sách này thì quá trình bắt tay thiết lập kết nối TCP sẽ bắt đầu ngay lập tức. Nếu bạn bật thì chức năng này chỉ ghi lại cổng và máy chủ lưu trữ từ xa, còn việc bắt tay thiết lập kết nối TCP chỉ diễn ra trong lệnh gọi đầu tiên đến otTcpSendByReference()
.
Nếu TCP nhanh Open (mở nhanh) bị tắt, thì phương thức gọi phải đợi lệnh gọi lại otTcpEstablished
cho biết rằng việc bắt tay thiết lập kết nối TCP đã hoàn tất trước khi có thể bắt đầu gửi dữ liệu, chẳng hạn như bằng cách gọi otTcpSendByReference()
.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
||||||
Giá trị trả về |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
Huỷ khởi động điểm cuối TCP này.
Điều này có nghĩa là OpenThread không còn theo dõi điểm cuối TCP này và phân bổ tất cả tài nguyên đã phân bổ nội bộ cho điểm cuối TCP này. Ứng dụng có thể sử dụng lại bộ nhớ hỗ trợ điểm cuối TCP khi thấy phù hợp.
Nếu tương ứng với kết nối TCP trực tiếp, kết nối sẽ bị chấm dứt một cách không đáng tin cậy (như trong otTcpAbort()). Tất cả tài nguyên mà ứng dụng đã cung cấp cho điểm cuối TCP này (vùng đệm liên kết cho vùng đệm gửi, bộ nhớ cho vùng đệm nhận, chính cấu trúc aEndpoint
, v.v.) sẽ được trả về ngay lập tức cho ứng dụng.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
Lấy con trỏ ngữ cảnh liên kết với aEndpoint
khi khởi chạy.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
||
Trả về |
Con trỏ ngữ cảnh liên kết với
aEndpoint . |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
Lấy otInstance được liên kết với aEndpoint
khi khởi chạy.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
||
Trả về |
Con trỏ otInstance liên kết với
aEndpoint . |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
Khởi động điểm cuối TCP.
Khi gọi hàm này, OpenThread theo dõi điểm cuối TCP, đồng thời lưu trữ và truy xuất dữ liệu TCP bên trong aEndpoint
. Ứng dụng không nên truy cập hoặc sửa đổi trực tiếp các trường trong aEndpoint
. Nếu cần lấy lại bộ nhớ sao lưu aEndpoint
, ứng dụng phải gọi otTcpEndpointDeinitialize().
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
||||||
Giá trị trả về |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
Lấy con trỏ đến máy chủ và cổng cục bộ của điểm cuối TCP.
Nội dung của máy chủ và cổng có thể đã cũ nếu ổ cắm này không ở trạng thái đã kết nối và chưa bị liên kết sau lần ngắt kết nối gần đây nhất.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
||
Trả về |
Máy chủ lưu trữ cục bộ và cổng của
aEndpoint . |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
Nhận con trỏ đến máy chủ và cổng của điểm cuối TCP.
Nội dung của máy chủ và cổng có thể đã cũ nếu ổ cắm này không ở trạng thái được kết nối.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
||
Trả về |
Máy chủ và cổng của ứng dụng ngang hàng kết nối của
aEndpoint . |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
Yêu cầu kết nối TCP đến khớp với cổng và địa chỉ IP đã chỉ định để kích hoạt lệnh gọi lại của trình nghe TCP này.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
Huỷ khởi tạo trình nghe TCP này.
Điều này có nghĩa là OpenThread không còn theo dõi trình nghe TCP này và sẽ phân bổ tất cả tài nguyên đã phân bổ nội bộ cho trình nghe TCP này. Ứng dụng có thể sử dụng lại bộ nhớ hỗ trợ trình nghe TCP khi thấy phù hợp.
Nếu trình nghe TCP hiện đang nghe thì nó sẽ ngừng nghe.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
Lấy con trỏ ngữ cảnh liên kết với aListener
khi khởi chạy.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
||
Trả về |
Con trỏ ngữ cảnh liên kết với
aListener . |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
Lấy otInstance được liên kết với aListener
khi khởi chạy.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
||
Trả về |
Con trỏ otInstance liên kết với
aListener . |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
Khởi động trình nghe TCP.
Khi gọi hàm này, OpenThread theo dõi trình nghe TCP, đồng thời lưu trữ và truy xuất dữ liệu TCP bên trong aListener
. Ứng dụng không nên truy cập hoặc sửa đổi trực tiếp các trường trong aListener
. Nếu cần thu hồi bộ nhớ sao lưu aListener
, ứng dụng phải gọi otTcpListenerDeinitialize().
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Các tham số |
|
||||||
Giá trị trả về |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
Cung cấp cho ứng dụng một chuỗi vùng đệm liên kết tham chiếu dữ liệu hiện có trong vùng đệm nhận TCP.
Chuỗi vùng đệm được liên kết vẫn hợp lệ cho đến khi lệnh gọi lại "nhận đã sẵn sàng" được gọi vào lần tiếp theo hoặc cho đến khi lệnh gọi tiếp theo đến otTcpReceiveContiguify() hoặc otTcpCommitReceive().
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Các tham số |
|
||||
Giá trị trả về |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
Sắp xếp lại vùng đệm nhận để hoàn toàn liền kề trong bộ nhớ.
Thao tác này không bắt buộc; ứng dụng chỉ cần truyền tải chuỗi vùng đệm liên kết thu được bằng cách gọi otTcpReceiveByReference
. Một số ứng dụng có thể muốn gọi hàm này để vùng đệm nhận liền kề nhằm đơn giản hoá việc xử lý dữ liệu, nhưng điều này sẽ khiến CPU phải tốn thời gian để sắp xếp lại dữ liệu trong vùng đệm nhận.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpSendByExtension
otError otTcpSendByExtension( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
Thêm dữ liệu vào vùng đệm gửi bằng cách mở rộng độ dài của otLinkedBuffer cuối cùng trong vùng đệm gửi theo lượng được chỉ định.
Nếu vùng đệm gửi trống thì thao tác sẽ không thành công.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Các tham số |
|
||||||
Giá trị trả về |
|
otTcpSendByReference
otError otTcpSendByReference( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags )
Thêm dữ liệu được vùng đệm liên kết do aBuffer
trỏ đến vào vùng đệm gửi.
Sau khi gọi hàm này thành công, vùng đệm liên kết và dữ liệu mà vùng đệm liên kết và dữ liệu mà nó tham chiếu sẽ thuộc sở hữu của ngăn xếp TCP; ứng dụng không được sửa đổi chúng cho đến khi lệnh gọi lại "send done" (gửi xong) trả về quyền sở hữu các đối tượng đó cho ứng dụng. Bạn có thể gọi hàm này để thêm một vùng đệm khác đã liên kết vào hàng đợi gửi, ngay cả khi lệnh gọi lại "gửi xong" cho lệnh gọi trước đó của hàm chưa được kích hoạt.
Lưu ý aBuffer
không được tạo chuỗi; trường mNext của nó phải là NULL. Nếu dữ liệu bổ sung được thêm ngay sau lệnh gọi này, thì bạn nên sử dụng cờ OT_TCP_SUBMIT_MORE_TO_COME làm gợi ý cho việc triển khai TCP.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
||||||
Giá trị trả về |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
Thông báo cho ứng dụng ngang hàng kết nối rằng điểm cuối TCP này sẽ không gửi thêm dữ liệu.
Bạn nên sử dụng lựa chọn này khi ứng dụng không có thêm dữ liệu để gửi đến ứng dụng ngang hàng kết nối. Đối với kết nối này, các lượt đọc trong tương lai trên thiết bị ngang hàng kết nối sẽ dẫn đến điều kiện "kết thúc luồng" và hoạt động ghi trong tương lai trên điểm cuối kết nối này sẽ không thành công.
Điều kiện "kết thúc luồng" chỉ áp dụng sau khi ứng dụng kết nối ngang hàng nhận được mọi dữ liệu được cung cấp trước đó cho ngăn xếp TCP để gửi đi.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
Khiến trình nghe TCP này ngừng lắng nghe các kết nối đến.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
Macro
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 392
OT_TCP_ENDPOINT_TCB_SIZE_BASE và OT_TCP_ENDPOINT_TCB_NUM_POINTERS được chọn sao cho trường mTcb của otTcpEndpoint có cùng kích thước với tcpcb cấu trúc trong TCPlp.
Điều này cần thiết vì trường mTcb, mặc dù không rõ ràng trong phần khai báo, nhưng được xem là tcpcb cấu trúc khi triển khai TCP.
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 và OT_TCP_LISTENER_TCB_NUM_POINTERS được chọn sao cho trường mTcbListener của otTcpListener có cùng kích thước với cấu trúc tcpcb_listen trong TCPlp.
Điều này cần thiết vì mặc dù trường mTcbListen không rõ ràng trong phần khai báo, nhưng trường này được coi là cấu trúc tcpcb khi triển khai TCP.
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598
Dung lượng bộ nhớ đệm đề xuất cho các kết nối TCP truyền tải khoảng 3 bước không dây trở xuống.
Trên các nền tảng có bộ nhớ đặc biệt bị hạn chế và trong trường hợp không cần băng thông cao, bạn nên chọn dung lượng bộ nhớ đệm nhỏ hơn theo cách thủ công.
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157
Dung lượng bộ nhớ đệm đề xuất cho các kết nối TCP truyền tải nhiều bước nhảy không dây.
Nếu kết nối TCP truyền tải một số lượng rất lớn các bước nhảy (hơn 6 bước), thì bạn nên chọn dung lượng bộ nhớ đệm lớn theo cách thủ công.
Tài nguyên
Các chủ đề tham khảo API OpenThread bắt nguồn từ mã nguồn, có trên GitHub. Để biết thêm thông tin hoặc để đóng góp cho tài liệu của chúng tôi, hãy tham khảo Tài nguyên.