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{
  OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT,
  OT_TCP_INCOMING_CONNECTION_ACTION_DEFER,
  OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
}
enum
Xác định các thao tác kết nối đến.

Typedef

otLinkedBuffer typedef
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) typedef
void(*
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) typedef
void(*
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 typedef
enum otTcpDisconnectedReason
otTcpEndpoint typedef
struct otTcpEndpoint
otTcpEndpointInitializeArgs typedef
Chứa các đối số cho hàm otTcpEndpointInitialize().
otTcpEstablished)(otTcpEndpoint *aEndpoint) typedef
void(*
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) typedef
void(*
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 typedef
struct otTcpListener
otTcpListenerInitializeArgs typedef
Chứa các đối số cho hàm otTcpListenerInitialize().
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining) typedef
void(*
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) typedef
void(*
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 otTcpConnect().

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ố
[in] aListener
Trình nghe TCP khớp với kết nối đến.
[in] aEndpoint
Điểm cuối TCP mà kết nối đến đã được chấp nhận.
[in] aPeer
máy chủ và cổng mà kết nối đến bắt nguồn.

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ố
[in] aListener
Trình nghe TCP khớp với kết nối đến.
[in] aPeer
Máy chủ và cổng mà kết nối đến bắt nguồn.
[out] aAcceptInto
Điểm cuối TCP để chấp nhận kết nối đến.
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ố
[in] aEndpoint
Điểm cuối TCP có kết nối bị mất.
[in] aReason
Lý do mất kết nối.

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ố
[in] aEndpoint
Điểm cuối TCP có kết nối hiện đã được thiết lập.

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ố
[in] aEndpoint
Điểm cuối TCP của kết nối.
[in] aInSendBuffer
Số byte trong vùng đệm gửi (tổng của các vùng "đang diễn ra" và "chưa thực hiện").
[in] aBacklog
Số byte đã được xếp hàng để gửi nhưng chưa được gửi (vùng "tồn đọng").

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ố
[in] aEndpoint
Điểm cuối TCP của kết nối.
[in] aBytesAvailable
Số byte trong vùng đệm nhận của kết nối.
[in] aEndOfStream
Cho biết liệu có thể nhận được dữ liệu bổ sung ngoài những dữ liệu đã có trong vùng đệm nhận của kết nối hay không.
[in] aBytesRemaining
Số byte bổ sung có thể nhận được trước khi vùng đệm nhận đầy.

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ố
[in] aEndpoint
Điểm cuối TCP của kết nối.
[in] aData
Một con trỏ đến otLinkedBuffer có thể được lấy lại.

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()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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP đại diện cho điểm cuối TCP để huỷ.
Giá trị trả về
OT_ERROR_NONE
Đã huỷ thành công kết nối của điểm cuối TCP.
OT_ERROR_FAILED
Không huỷ được kết nối của điểm cuối TCP.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP để liên kết.
[in] aSockName
Địa chỉ và cổng để liên kết điểm cuối TCP này.
Giá trị trả về
OT_ERROR_NONE
Đã liên kết thành công điểm cuối TCP.
OT_ERROR_FAILED
Không liên kết được điểm cuối TCP.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP đại diện cho điểm cuối TCP sẽ nhận dữ liệu.
[in] aNumBytes
Số byte đã dùng.
[in] aFlags
Cờ chỉ định các tuỳ chọn cho thao tác này (chưa có).
Giá trị trả về
OT_ERROR_NONE
Đã hoàn tất thành công thao tác nhận.
OT_ERROR_FAILED
Không hoàn tất được thao tác nhận.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP để kết nối.
[in] aSockName
Địa chỉ IP và cổng của máy chủ cần kết nối.
[in] aFlags
Cờ chỉ định các tuỳ chọn cho thao tác này (xem bảng liệt kê ở trên).
Giá trị trả về
OT_ERROR_NONE
Đã hoàn tất thành công thao tác.
OT_ERROR_FAILED
Không hoàn thành được thao tác.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP để huỷ khởi tạo.
Giá trị trả về
OT_ERROR_NONE
Đã huỷ khởi động thành công điểm cuối TCP.
OT_ERROR_FAILED
Không huỷ khởi tạo được điểm cuối TCP.

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ố
[in] aEndpoint
Điểm cuối TCP có ngữ cảnh cần lấy.
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ố
[in] aEndpoint
Điểm cuối TCP có thực thể cần lấy.
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ố
[in] aInstance
Con trỏ đến một thực thể OpenThread.
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP.
[in] aArgs
Con trỏ đến cấu trúc của các đối số.
Giá trị trả về
OT_ERROR_NONE
Đã mở thành công điểm cuối TCP.
OT_ERROR_FAILED
Không mở được điểm cuối TCP.

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ố
[in] aEndpoint
Điểm cuối TCP có máy chủ cục bộ và cổng cần lấy.
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ố
[in] aEndpoint
Điểm cuối TCP có máy chủ lưu trữ của ứng dụng ngang hàng và cổng cần lấy.
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ố
[in] aListener
Con trỏ đến cấu trúc trình nghe TCP sẽ bắt đầu lắng nghe.
[in] aSockName
Địa chỉ và cổng để theo dõi các kết nối đến.
Giá trị trả về
OT_ERROR_NONE
Đã bắt đầu nghe thành công trên trình nghe TCP.
OT_ERROR_FAILED
Không bắt đầu nghe được trên trình nghe TCP.

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ố
[in] aListener
Con trỏ đến cấu trúc trình nghe TCP để huỷ khởi tạo.
Giá trị trả về
OT_ERROR_NONE
Đã huỷ khởi động thành công trình nghe TCP.
OT_ERROR_FAILED
Không huỷ khởi động được trình nghe TCP.

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ố
[in] aListener
Trình nghe TCP có ngữ cảnh cần lấy.
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ố
[in] aListener
Trình nghe TCP có thực thể cần lấy.
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ố
[in] aInstance
Con trỏ đến một thực thể OpenThread.
[in] aListener
Con trỏ đến cấu trúc trình nghe TCP.
[in] aArgs
Con trỏ đến cấu trúc của các đối số.
Giá trị trả về
OT_ERROR_NONE
Đã mở thành công trình nghe TCP.
OT_ERROR_FAILED
Không mở được trình nghe TCP.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP đại diện cho điểm cuối TCP sẽ nhận dữ liệu.
[out] aBuffer
Con trỏ đến chuỗi vùng đệm liên kết tham chiếu đến dữ liệu hiện có trong vùng đệm nhận.
Giá trị trả về
OT_ERROR_NONE
Đã hoàn tất thành công thao tác.
OT_ERROR_FAILED
Không hoàn thành được thao tác.

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ố
[in] aEndpoint
Con trỏ đến điểm cuối TCP có vùng đệm nhận để sắp xếp lại.
Giá trị trả về
OT_ERROR_NONE
Đã hoàn tất thành công thao tác.
OT_ERROR_FAILED
Không hoàn thành được thao tác.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP đại diện cho điểm cuối TCP để gửi dữ liệu.
[in] aNumBytes
Số byte dùng để mở rộng độ dài của vùng đệm liên kết cuối cùng.
[in] aFlags
Cờ chỉ định các tuỳ chọn cho thao tác này (xem bảng liệt kê ở trên).
Giá trị trả về
OT_ERROR_NONE
Đã thêm thành công dữ liệu vào vùng đệm gửi.
OT_ERROR_FAILED
Không thêm được dữ liệu vào vùng đệm gửi.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP đại diện cho điểm cuối TCP để gửi dữ liệu.
[in] aBuffer
Con trỏ đến chuỗi vùng đệm liên kết tham chiếu dữ liệu cần thêm vào vùng đệm gửi.
[in] aFlags
Cờ chỉ định các tuỳ chọn cho thao tác này (xem bảng liệt kê ở trên).
Giá trị trả về
OT_ERROR_NONE
Đã thêm thành công dữ liệu vào vùng đệm gửi.
OT_ERROR_FAILED
Không thêm được dữ liệu vào vùng đệm gửi.

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ố
[in] aEndpoint
Con trỏ đến cấu trúc điểm cuối TCP, đại diện cho điểm cuối TCP cần tắt.
Giá trị trả về
OT_ERROR_NONE
Đã đưa điều kiện "kết thúc luồng" vào hàng đợi truyền.
OT_ERROR_FAILED
Không xếp được điều kiện "kết thúc phát trực tiếp" vào hàng đợi để truyền.

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ố
[in] aListener
Một con trỏ đến cấu trúc trình nghe TCP sẽ dừng nghe.
Giá trị trả về
OT_ERROR_NONE
Đã dừng nghe thành công trên trình nghe TCP.
OT_ERROR_FAILED
Không thể dừng nghe trên trình nghe TCP.

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.