TCP
โมดูลนี้มีฟังก์ชันที่ควบคุมการสื่อสารผ่าน TCP
สรุป
การแจกแจง |
|
---|---|
anonymous enum
|
enum ระบุแฟล็กที่ส่งไปยัง otTcpConnect() |
anonymous enum
|
enum ระบุแฟล็กที่ส่งไปยัง otTcpSendByReference |
otTcpDisconnectedReason
|
enum |
otTcpIncomingConnectionAction{
|
enum กำหนดการทำงานของการเชื่อมต่อขาเข้า |
Typedef |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
โครงสร้างบัฟเฟอร์ที่ลิงก์ไว้สำหรับใช้กับ TCP |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
โค้ดเรียกกลับนี้บ่งบอกว่าการเชื่อมต่อ TCP พร้อมสำหรับการสื่อสารแบบ 2 ทางแล้ว |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef โค้ดเรียกกลับนี้บ่งบอกว่าการเชื่อมต่อขาเข้าที่ตรงกับ Listener TCP นี้มาถึงแล้ว |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
โค้ดเรียกกลับนี้ระบุว่าการเชื่อมต่อเสียหายและไม่ควรใช้งานอีกต่อไป หรือการเชื่อมต่ออยู่ในสถานะ TIME-WAIT |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
มีอาร์กิวเมนต์ในฟังก์ชัน otTcpEndpointInitialize() |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
โค้ดเรียกกลับนี้จะแจ้งแอปพลิเคชันว่าแฮนด์เชค 3 ทาง TCP เสร็จสมบูรณ์ และสร้างการเชื่อมต่อแล้ว |
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
|
typedefvoid(*
โค้ดเรียกกลับนี้จะแจ้งแอปพลิเคชันว่ามีความคืบหน้าในการส่งต่อในการโอนข้อมูลจากบัฟเฟอร์ที่ส่งไปยังผู้รับหรือไม่ |
otTcpIncomingConnectionAction
|
typedef กำหนดการทำงานของการเชื่อมต่อขาเข้า |
otTcpListener
|
typedefstruct otTcpListener
|
otTcpListenerInitializeArgs
|
typedefstruct otTcpListenerInitializeArgs
มีอาร์กิวเมนต์ในฟังก์ชัน otTcpListenerInitialize() |
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
|
typedefvoid(*
โค้ดเรียกกลับนี้จะระบุจำนวนไบต์ที่พร้อมใช้งานจากบัฟเฟอร์ของการรับ |
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
|
typedefvoid(*
โค้ดเรียกกลับนี้จะแจ้งให้แอปพลิเคชันทราบว่าข้อมูลใน aData ที่ระบุได้รับการยอมรับจากเพียร์การเชื่อมต่อ และแอปพลิเคชันสามารถอ้างสิทธิ์ aData และข้อมูลที่อยู่ในแอปอีกครั้งได้ |
ฟังก์ชัน |
|
---|---|
otTcpAbort(otTcpEndpoint *aEndpoint)
|
บังคับให้สิ้นสุดการเชื่อมต่อ TCP ที่เชื่อมโยงกับปลายทาง TCP นี้
|
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
|
เชื่อมโยงปลายทาง TCP กับพอร์ตและที่อยู่ IP
|
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
แจ้งสแต็ก TCP ว่าแอปพลิเคชันประมวลผลข้อมูลขนาด
aNumBytes ไบต์ที่จุดเริ่มบัฟเฟอร์ของการรับแล้ว และสแต็ก TCP ไม่จำเป็นต้องเก็บไบต์เหล่านั้นในบัฟเฟอร์ของการรับ |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
บันทึกโฮสต์ระยะไกลและพอร์ตสำหรับการเชื่อมต่อนี้
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
ยกเลิกการเริ่มต้นปลายทาง TCP นี้
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
รับตัวชี้บริบทที่เชื่อมโยงกับ
aEndpoint เมื่อเริ่มต้น |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
รับ otInstance ที่เชื่อมโยงกับ
aEndpoint เมื่อเริ่มต้น |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
เริ่มต้นปลายทาง TCP
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
รับตัวชี้ไปยังโฮสต์และพอร์ตในเครื่องของปลายทาง TCP
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
รับตัวชี้ไปยังโฮสต์และพอร์ตของเพียร์ปลายทาง TCP
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
ทำให้การเชื่อมต่อ TCP ขาเข้าที่ตรงกับที่อยู่ IP และพอร์ตที่ระบุทริกเกอร์การเรียกกลับของ Listener ของ TCP นี้
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
ยกเลิกการเริ่มต้น Listener ของ TCP นี้
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
รับตัวชี้บริบทที่เชื่อมโยงกับ
aListener เมื่อเริ่มต้น |
otTcpListenerGetInstance(otTcpListener *aListener)
|
รับ otInstance ที่เชื่อมโยงกับ
aListener เมื่อเริ่มต้น |
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
|
เริ่มต้น Listener ของ TCP
|
otTcpReceiveByReference(otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
|
จัดเตรียมแอปพลิเคชันด้วยห่วงโซ่บัฟเฟอร์ที่ลิงก์โดยอ้างอิงข้อมูลที่อยู่ในบัฟเฟอร์เพื่อรับ TCP
|
otTcpReceiveContiguify(otTcpEndpoint *aEndpoint)
|
จัดระเบียบบัฟเฟอร์ที่ได้รับใหม่ให้ต่อเนื่องกันในหน่วยความจำ
|
otTcpSendByExtension(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
เพิ่มข้อมูลลงในบัฟเฟอร์การส่งโดยขยายความยาวของ otLinkedBuffer สุดท้ายในบัฟเฟอร์ที่ส่งตามจำนวนที่ระบุ
|
otTcpSendByReference(otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
|
เพิ่มข้อมูลที่อ้างอิงโดยบัฟเฟอร์ที่ลิงก์ซึ่งชี้โดย
aBuffer ไปยังบัฟเฟอร์ที่ส่ง |
otTcpSendEndOfStream(otTcpEndpoint *aEndpoint)
|
แจ้งเพียร์การเชื่อมต่อว่าปลายทาง TCP นี้จะไม่ส่งข้อมูลเพิ่มเติม
|
otTcpStopListening(otTcpListener *aListener)
|
ทำให้ Listener TCP นี้หยุดฟังการเชื่อมต่อขาเข้า
|
โครงสร้าง |
|
---|---|
otLinkedBuffer |
โครงสร้างบัฟเฟอร์ที่ลิงก์ไว้สำหรับใช้กับ TCP |
otTcpEndpoint |
แสดงปลายทาง TCP |
otTcpEndpointInitializeArgs |
มีอาร์กิวเมนต์ในฟังก์ชัน otTcpEndpointInitialize() |
otTcpListener |
แสดง Listener ของ TCP |
otTcpListenerInitializeArgs |
มีอาร์กิวเมนต์ในฟังก์ชัน otTcpListenerInitialize() |
การแจกแจง
enum ที่ไม่ระบุตัวตน
anonymous enum
ระบุแฟล็กที่ส่งไปยัง otTcpSendByReference
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
กำหนดการทำงานของการเชื่อมต่อขาเข้า
ซึ่งจะใช้ในโค้ดเรียกกลับ otTcpAcceptReady()
พร็อพเพอร์ตี้ | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
ยอมรับการเชื่อมต่อขาเข้า |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
เลื่อนการเชื่อมต่อขาเข้า (ไม่ต้องสนใจ) |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
ปฏิเสธการเชื่อมต่อขาเข้า |
Typedef
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
โครงสร้างบัฟเฟอร์ที่ลิงก์ไว้สำหรับใช้กับ TCP
โครงสร้าง otLinkedBuffer เดียวอ้างอิงอาร์เรย์ของไบต์ในหน่วยความจำผ่าน mData และ mLength ช่อง mNext จะใช้ในการสร้างเชนโครงสร้าง otLinkedBuffer
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
โค้ดเรียกกลับนี้บ่งบอกว่าการเชื่อมต่อ TCP พร้อมสำหรับการสื่อสารแบบ 2 ทางแล้ว
ในกรณีของ TCP Fast Open นี่อาจจะเกิดขึ้นก่อนที่แฮนด์เชคการเชื่อมต่อ TCP จะเสร็จสมบูรณ์ แอปพลิเคชันมาพร้อมกับตัวชี้บริบททั้งสำหรับ Listener TCP ที่ยอมรับการเชื่อมต่อและปลายทาง TCP ที่ยอมรับ บริบทที่ให้ไว้คือบริบทที่เชื่อมโยงกับ Listener ของ TCP
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
โค้ดเรียกกลับนี้บ่งบอกว่าการเชื่อมต่อขาเข้าที่ตรงกับ Listener TCP นี้มาถึงแล้ว
การตอบสนองทั่วไปคือการให้แอปพลิเคชันยอมรับการเชื่อมต่อขาเข้า ซึ่งทำได้โดยการป้อนข้อมูล aAcceptInto
ด้วยตัวชี้ที่ otTcpEndpoint เพื่อยอมรับการเชื่อมต่อขาเข้า otTcpEndpoint ต้องเริ่มต้นโดยใช้ otTcpEndpointInitialize() จากนั้นแอปพลิเคชันจะแสดงผล OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
หรือแอปพลิเคชันสามารถปฏิเสธที่จะยอมรับการเชื่อมต่อขาเข้า แอปพลิเคชันจะดำเนินการได้ 2 วิธี ก่อนอื่น หากแอปพลิเคชันส่งคืน OT_TCP_INCOMING_CONNECTION_ACTION_DEFER จากนั้น OpenThread จะเพิกเฉยต่อคำขอสร้างการเชื่อมต่อโดยไม่มีการแจ้งเตือน การเพียร์การเชื่อมต่อมีแนวโน้มที่จะส่งคำขออีกครั้ง ซึ่งในเวลานั้นจะมีการเรียกใช้โค้ดเรียกกลับอีกครั้ง ซึ่งจะมีประโยชน์หากทรัพยากรไม่พร้อมให้ยอมรับการเชื่อมต่อในขณะนี้ แต่อาจใช้ได้เมื่อเพียร์ส่งการเชื่อมต่ออีกครั้ง อันดับที่สอง หากแอปพลิเคชันแสดงผล OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE แล้ว OpenThread จะส่งข้อความ "ถูกปฏิเสธการเชื่อมต่อ" ไปยังโฮสต์ที่พยายามจะสร้างการเชื่อมต่อ หากแอปพลิเคชันปฏิเสธการเชื่อมต่อขาเข้า ก็ไม่จำเป็นต้องป้อนข้อมูล aAcceptInto
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
การส่งคืน |
คำอธิบายวิธีจัดการการเชื่อมต่อขาเข้า
|
otTcpDisconnected
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
โค้ดเรียกกลับนี้ระบุว่าการเชื่อมต่อเสียหายและไม่ควรใช้งานอีกต่อไป หรือการเชื่อมต่ออยู่ในสถานะ TIME-WAIT
ข้อผิดพลาดนี้อาจเกิดขึ้นเมื่อการสร้างการเชื่อมต่อ (เริ่มโดยการเรียกใช้ otTcpConnect()) ล้มเหลวหรือจุดใดก็ตามหลังจากนั้น (เช่น ในกรณีที่การเชื่อมต่อหมดเวลาหรือได้รับกลุ่ม RST จากเพียร์การเชื่อมต่อ) เมื่อโค้ดเรียกกลับเริ่มทำงาน ทรัพยากรทั้งหมดที่แอปพลิเคชันมีให้สำหรับการเชื่อมต่อนี้ (กล่าวคือ otLinkedBuffers
และหน่วยความจำที่อ้างอิง แต่ไม่ใช่ปลายทาง TCP หรือพื้นที่สำหรับบัฟเฟอร์ที่ได้รับ) จะสามารถเรียกคืนได้ ในกรณีที่การเชื่อมต่อเข้าสู่สถานะ TIME-WAIT จะมีการเรียกกลับ 2 ครั้ง โดยครั้งแรกเมื่อเข้าสู่สถานะ TIME-WAIT (โดยมี OT_TCP_DISCONNECTED_REASON_TIME_WAIT และอีกครั้งเมื่อสถานะ TIME-WAIT หมดอายุ (โดยมี OT_TCP_DISCONNECTED_REASON_NORMAL)
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
มีอาร์กิวเมนต์ในฟังก์ชัน otTcpEndpointInitialize()
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
โค้ดเรียกกลับนี้จะแจ้งแอปพลิเคชันว่าแฮนด์เชค 3 ทาง TCP เสร็จสมบูรณ์ และสร้างการเชื่อมต่อแล้ว
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
โค้ดเรียกกลับนี้จะแจ้งแอปพลิเคชันว่ามีความคืบหน้าในการส่งต่อในการโอนข้อมูลจากบัฟเฟอร์ที่ส่งไปยังผู้รับหรือไม่
ไม่จำเป็นต้องเรียกกลับนี้สำหรับการทำงาน TCP ที่ถูกต้อง แอปพลิเคชันส่วนใหญ่จะใช้เพียงโค้ดเรียกกลับ otTcpSendDone() เพื่ออ้างสิทธิ์บัฟเฟอร์ที่ลิงก์อีกครั้งเมื่อสแต็ก TCP ใช้งานได้เสร็จแล้ว วัตถุประสงค์ของโค้ดเรียกกลับนี้คือการรองรับแอปพลิเคชันขั้นสูงที่ได้ประโยชน์จากข้อมูลโดยละเอียดเกี่ยวกับวิธีที่การเชื่อมต่อมีความคืบหน้าในการโอนข้อมูลไปยังเพียร์การเชื่อมต่อ
การดำเนินการของโค้ดเรียกกลับนี้เชื่อมโยงอย่างใกล้ชิดกับบัฟเฟอร์การส่งของ TCP ซึ่งบัฟเฟอร์ที่ส่งจะมี 2 ภูมิภาค อย่างแรกคือ ภูมิภาค "กำลังบิน" อยู่ตรงหัว (ด้านหน้า) ของบัฟเฟอร์การส่ง ซึ่งสอดคล้องกับข้อมูลที่ส่งไปยังผู้รับแล้ว แต่ยังไม่ได้รับทราบ ประการที่สองคือภูมิภาค " Backlog" ซึ่งประกอบด้วยข้อมูลทั้งหมดในบัฟเฟอร์การส่งที่ไม่ได้อยู่ในภูมิภาค "กำลังบิน" ภูมิภาค " Backlog" จะสอดคล้องกับข้อมูลที่รออยู่ในคิวสำหรับส่ง แต่ยังไม่ได้ส่ง
มีการเรียกกลับเพื่อตอบสนองต่อเหตุการณ์ 2 ประเภท อย่างแรก พื้นที่ "ขณะทำงาน" ของบัฟเฟอร์ที่ส่งอาจลดขนาดลง (เช่น เมื่อผู้รับรับทราบข้อมูลที่เราส่งไปก่อนหน้า) ประการที่ 2 พื้นที่ "ค้าง" ของบัฟเฟอร์ที่ส่งอาจหดตัวลง (เช่น มีการส่งข้อมูลใหม่) ทั้ง 2 เงื่อนไขนี้มักเกิดขึ้นพร้อมกันเพื่อตอบสนองกลุ่ม ACK จากเพียร์การเชื่อมต่อ ซึ่งเป็นสาเหตุที่ระบบรวมเงื่อนไขเหล่านี้ไว้ในโค้ดเรียกกลับเดียว
สแต็ก TCP จะใช้เพียง aInSendBuffer
ไบต์ที่ด้านท้ายของบัฟเฟอร์ที่ส่ง เมื่อ aInSendBuffer
ลดลงเป็นจำนวน x หมายความว่าไบต์เพิ่มเติม x ไบต์ที่เคยอยู่ที่ส่วนหัวของบัฟเฟอร์ที่ส่งจะไม่เป็นส่วนหนึ่งของบัฟเฟอร์การส่งอีกต่อไป และตอนนี้แอปสามารถอ้างสิทธิ์ใหม่ได้ (เช่น เขียนทับ) โปรดทราบว่าคุณสามารถอ้างสิทธิ์โครงสร้าง otLinkedBuffer คืนได้ก็ต่อเมื่อไบต์ทั้งหมดที่มีการอ้างอิงไม่ได้เป็นส่วนหนึ่งของบัฟเฟอร์การส่งอีกต่อไปแล้ว
โค้ดเรียกกลับนี้ใช้ย่อยของ otTcpSendDone() ในความหมายต่อไปนี้ แอปพลิเคชันสามารถระบุได้ว่าจะอ้างสิทธิ์บัฟเฟอร์ที่ลิงก์อีกครั้งเมื่อใดโดยเปรียบเทียบ aInSendBuffer
กับจำนวนไบต์ที่อยู่ในบัฟเฟอร์ที่ลิงก์แต่ละรายการ อย่างไรก็ตาม เราคาดหวังให้ otTcpSendDone() ซึ่งสื่อสารโดยตรงว่า otLinkedBuffers ไหนนำมาใช้ใหม่ได้เพื่อให้ใช้งานง่ายขึ้นมาก หากมีการลงทะเบียนโค้ดเรียกกลับทั้ง 2 รายการและทริกเกอร์โดยเหตุการณ์เดียวกัน (เช่น ได้รับกลุ่ม ACK เดียวกัน) ระบบจะทริกเกอร์โค้ดเรียกกลับ otTcpSendDone() ก่อน ตามด้วยโค้ดเรียกกลับนี้
นอกจากนี้ โค้ดเรียกกลับนี้จะให้ข้อมูล aBacklog
ซึ่งบอกจํานวนไบต์ในบัฟเฟอร์ที่ส่งที่ยังไม่ได้ดําเนินการ สำหรับแอปพลิเคชันที่ต้องการเพิ่มข้อมูลไปยังบัฟเฟอร์การส่งเมื่อมั่นใจว่าระบบจะส่งออกในเร็วๆ นี้เท่านั้น คุณควรส่งข้อมูลออกเฉพาะในกรณีที่ aBacklog
มีขนาดเล็กที่เหมาะสม (0 หรือเกือบถึง 0) ตัวอย่างเช่น แอปพลิเคชันอาจใช้ aBacklog
เพื่อให้สามารถตอบสนองต่อคิวการสร้างคิวโดยการทิ้งหรือรวมข้อมูลเพื่อหลีกเลี่ยงการสร้างรายการค้างของข้อมูล
หลังจากเรียก otTcpSendByReference() หรือ otTcpSendByExtension() เป็นจำนวนไบต์บวก ก็รับประกันได้เลยว่าจะมีการเรียกกลับ otTcpForwardProgress() เพื่อระบุเวลาที่เพิ่มไบต์ที่เพิ่มลงในบัฟเฟอร์การส่ง การเรียกใช้ otTcpForwardProgress() อาจทำขึ้นทันทีหลังจากมีการเพิ่มไบต์ลงในบัฟเฟอร์การส่ง (หากไบต์เหล่านั้นบางส่วนมีการส่งออกไปทันที ซึ่งเป็นการลดรายการงานที่ยังทำไม่เสร็จ) หรือในบางครั้งในอนาคต (เมื่อการเชื่อมต่อส่งข้อมูลบางส่วนหรือทั้งหมดออกไป จึงลด Backlog) "ในทันที" หมายความว่าจะมีการตั้งเวลาการเรียกกลับทันทีสำหรับการดำเนินการใน Tasklet เพื่อหลีกเลี่ยงความซับซ้อนที่เกี่ยวข้องกับการทำซ้ำ โค้ดเรียกกลับ otTcpForwardProgress() จะไม่ถูกเรียกจากฟังก์ชัน otTcpSendByReference() หรือ otTcpSendByExtension() โดยตรง
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
otTcpIncomingConnectionAction
enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction
กำหนดการทำงานของการเชื่อมต่อขาเข้า
ซึ่งจะใช้ในโค้ดเรียกกลับ otTcpAcceptReady()
otTcpListener
struct otTcpListener otTcpListener
otTcpListenerInitializeArgs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
มีอาร์กิวเมนต์ในฟังก์ชัน otTcpListenerInitialize()
otTcpReceiveAvailable
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
โค้ดเรียกกลับนี้จะระบุจำนวนไบต์ที่พร้อมใช้งานจากบัฟเฟอร์ของการรับ
ระบบจะเรียกใช้เมื่อใดก็ตามที่มีการเพิ่มไบต์ลงในบัฟเฟอร์ของการรับและเมื่อถึงขีดจำกัดของสตรีม หากถึงจุดสิ้นสุดของสตรีมแล้ว (เช่น หากไม่มีข้อมูลให้อ่านอีกเนื่องจากการเพียร์ปิดการสิ้นสุดการเชื่อมต่อเพื่อเขียน) aEndOfStream
จะเป็น True สุดท้าย aBytesRemaining
จะแสดงความจุที่เหลืออยู่ในบัฟเฟอร์ที่รับข้อมูลเพื่อใช้เก็บข้อมูลเพิ่มเติมที่เข้ามา
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
โค้ดเรียกกลับนี้จะแจ้งให้แอปพลิเคชันทราบว่าข้อมูลใน aData
ที่ระบุได้รับการยอมรับจากเพียร์การเชื่อมต่อ และแอปพลิเคชันสามารถอ้างสิทธิ์ aData
และข้อมูลที่อยู่ในแอปอีกครั้งได้
เรารับประกันว่า aData
จะเหมือนกับเวอร์ชันที่ส่งไปยัง TCP ผ่าน otTcpSendByReference() รวมถึงส่วนขยายที่ส่งผลผ่าน otTcpSendByExtension()
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
ฟังก์ชัน
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
บังคับให้สิ้นสุดการเชื่อมต่อ TCP ที่เชื่อมโยงกับปลายทาง TCP นี้
การดำเนินการนี้จะทำให้ปลายทาง TCP ใช้งานได้ฟรีสำหรับการเชื่อมต่ออื่นทันที และจะล้างการส่งและรับบัฟเฟอร์ ซึ่งเป็นการโอนความเป็นเจ้าของข้อมูลใดๆ ที่แอปพลิเคชันให้ไว้ใน otTcpSendByReference() และ otTcpSendByExtension() เรียกกลับไปยังแอปพลิเคชัน โค้ดเรียกกลับและหน่วยความจำของปลายทาง TCP สำหรับบัฟเฟอร์ที่ได้รับจะยังคงเชื่อมโยงกับปลายทาง TCP
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
เชื่อมโยงปลายทาง TCP กับพอร์ตและที่อยู่ IP
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
แจ้งสแต็ก TCP ว่าแอปพลิเคชันประมวลผลข้อมูลขนาด aNumBytes
ไบต์ที่จุดเริ่มบัฟเฟอร์ของการรับแล้ว และสแต็ก TCP ไม่จำเป็นต้องเก็บไบต์เหล่านั้นในบัฟเฟอร์ของการรับ
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
บันทึกโฮสต์ระยะไกลและพอร์ตสำหรับการเชื่อมต่อนี้
ต้องเปิดหรือปิดใช้ TCP แบบเร็วโดยใช้ aFlags
หากปิดใช้ แฮนด์เชคการสร้างการเชื่อมต่อ TCP จะเริ่มต้นทันที หากเปิดใช้ ฟังก์ชันนี้จะบันทึกโฮสต์และพอร์ตระยะไกลเท่านั้น แฮนด์เชคของการสร้างการเชื่อมต่อ TCP จะเกิดขึ้นในการเรียก otTcpSendByReference()
ครั้งแรกเท่านั้น
หากปิดใช้ TCP Fast Open อยู่ ผู้โทรจะต้องรอให้การโทรกลับของ otTcpEstablished
ซึ่งระบุว่าแฮนด์เชคการเชื่อมต่อ TCP เสร็จสิ้นก่อน จึงจะสามารถเริ่มส่งข้อมูลได้ เช่น โดยการโทรหา otTcpSendByReference()
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
ยกเลิกการเริ่มต้นปลายทาง TCP นี้
ซึ่งหมายความว่า OpenThread จะไม่ติดตามปลายทาง TCP นี้และจัดการกับทรัพยากรทั้งหมดที่จัดสรรไว้ภายในสำหรับปลายทาง TCP นี้ แอปพลิเคชันสามารถนำหน่วยความจำสำรองปลายทาง TCP มาใช้ซ้ำตามความเหมาะสม
หากสอดคล้องกับการเชื่อมต่อ TCP แบบสด การเชื่อมต่อจะยุติลงโดยไม่เจตนา (เช่น otTcpAbort()) ทรัพยากรทั้งหมดที่แอปพลิเคชันให้ไว้สำหรับปลายทาง TCP นี้ (บัฟเฟอร์ลิงก์ของบัฟเฟอร์ที่ส่ง หน่วยความจำสำหรับบัฟเฟอร์ที่ได้รับ หรือโครงสร้าง aEndpoint
เอง) จะถูกส่งกลับไปยังแอปพลิเคชันทันที
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
รับตัวชี้บริบทที่เชื่อมโยงกับ aEndpoint
เมื่อเริ่มต้น
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
||
การส่งคืน |
ตัวชี้บริบทที่เชื่อมโยงกับ
aEndpoint |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
รับ otInstance ที่เชื่อมโยงกับ aEndpoint
เมื่อเริ่มต้น
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
||
การส่งคืน |
ตัวชี้ otInstance ที่เชื่อมโยงกับ
aEndpoint |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
เริ่มต้นปลายทาง TCP
การเรียกฟังก์ชันนี้ทำให้ OpenThread จะติดตามปลายทาง TCP รวมถึงจัดเก็บและเรียกข้อมูล TCP ภายใน aEndpoint
แอปพลิเคชันไม่ควรเข้าถึงหรือแก้ไขช่องใน aEndpoint
โดยตรง หากแอปพลิเคชันต้องเรียกคืนหน่วยความจำสำรอง aEndpoint
แอปพลิเคชันควรเรียกใช้ otTcpEndpointDeinitialize()
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
รับตัวชี้ไปยังโฮสต์และพอร์ตในเครื่องของปลายทาง TCP
เนื้อหาของโฮสต์และพอร์ตอาจไม่อัปเดตหากซ็อกเก็ตนี้ไม่อยู่ในสถานะเชื่อมต่อและไม่มีการเชื่อมโยงหลังจากการเชื่อมต่อครั้งล่าสุด
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
||
การส่งคืน |
โฮสต์ในเครื่องและพอร์ตของ
aEndpoint |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
รับตัวชี้ไปยังโฮสต์และพอร์ตของเพียร์ปลายทาง TCP
เนื้อหาของโฮสต์และพอร์ตอาจไม่อัปเดตหากซ็อกเก็ตนี้ไม่อยู่ในสถานะเชื่อมต่อ
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
||
การส่งคืน |
โฮสต์และพอร์ตของเพียร์การเชื่อมต่อของ
aEndpoint |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
ทำให้การเชื่อมต่อ TCP ขาเข้าที่ตรงกับที่อยู่ IP และพอร์ตที่ระบุทริกเกอร์การเรียกกลับของ Listener ของ TCP นี้
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
ยกเลิกการเริ่มต้น Listener ของ TCP นี้
ซึ่งหมายความว่า OpenThread จะไม่ติดตาม Listener ของ TCP นี้อีกต่อไป และจัดสรรทรัพยากรทั้งหมดที่จัดสรรไว้เป็นการภายในสำหรับ Listener TCP นี้ แอปพลิเคชันสามารถใช้หน่วยความจำสำรอง Listener ของ TCP ซ้ำตามความเหมาะสม
หาก Listener ของ TCP กำลังฟังอยู่ ตัวฟังนั้นจะหยุดฟัง
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
รับตัวชี้บริบทที่เชื่อมโยงกับ aListener
เมื่อเริ่มต้น
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
||
การส่งคืน |
ตัวชี้บริบทที่เชื่อมโยงกับ
aListener |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
รับ otInstance ที่เชื่อมโยงกับ aListener
เมื่อเริ่มต้น
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
||
การส่งคืน |
ตัวชี้ otInstance ที่เชื่อมโยงกับ
aListener |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
เริ่มต้น Listener ของ TCP
การเรียกฟังก์ชันนี้ทำให้ OpenThread จะติดตาม Listener ของ TCP รวมถึงจัดเก็บและเรียกข้อมูล TCP ภายใน aListener
แอปพลิเคชันไม่ควรเข้าถึงหรือแก้ไขช่องใน aListener
โดยตรง หากแอปพลิเคชันต้องเรียกคืนหน่วยความจำสำรอง aListener
แอปพลิเคชันควรเรียก otTcpListenerDeinitialize()
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
จัดเตรียมแอปพลิเคชันด้วยห่วงโซ่บัฟเฟอร์ที่ลิงก์โดยอ้างอิงข้อมูลที่อยู่ในบัฟเฟอร์เพื่อรับ TCP
ห่วงโซ่บัฟเฟอร์ที่ลิงก์จะใช้ได้จนกว่าจะมีการเรียกใช้การเรียกกลับ "รับพร้อม" ครั้งถัดไป หรือจนกว่าจะมีการเรียกไปยัง otTcpReceiveContiguify() หรือ otTcpCommitReceive() ครั้งถัดไป
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
จัดระเบียบบัฟเฟอร์ที่ได้รับใหม่ให้ต่อเนื่องกันในหน่วยความจำ
วิธีนี้เป็นขั้นตอนที่ไม่บังคับ แอปพลิเคชันสามารถข้ามผ่านห่วงโซ่บัฟเฟอร์ที่ลิงก์ไว้ซึ่งมาจากการเรียกใช้ otTcpReceiveByReference
แอปพลิเคชันบางรายการอาจต้องการเรียกใช้ฟังก์ชันนี้เพื่อให้บัฟเฟอร์ที่ได้รับต่อเนื่องกันเพื่อลดความซับซ้อนในการประมวลผลข้อมูล แต่จะต้องลดเวลา CPU ในการจัดระเบียบข้อมูลในบัฟเฟอร์ที่ได้รับใหม่
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpSendByExtension
otError otTcpSendByExtension( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
เพิ่มข้อมูลลงในบัฟเฟอร์การส่งโดยขยายความยาวของ otLinkedBuffer สุดท้ายในบัฟเฟอร์ที่ส่งตามจำนวนที่ระบุ
หากบัฟเฟอร์ที่ส่งว่างเปล่า แสดงว่าการดำเนินการล้มเหลว
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
otTcpSendByReference
otError otTcpSendByReference( otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags )
เพิ่มข้อมูลที่อ้างอิงโดยบัฟเฟอร์ที่ลิงก์ซึ่งชี้โดย aBuffer
ไปยังบัฟเฟอร์ที่ส่ง
เมื่อเรียกฟังก์ชันนี้สำเร็จ บัฟเฟอร์และข้อมูลที่ลิงก์ซึ่งสแต็ก TCP จะเป็นของสแต็ก TCP และไม่ควรแก้ไขโดยแอปพลิเคชันจนกว่าโค้ดเรียกกลับ "ส่งเสร็จสิ้น" จะส่งการเป็นเจ้าของออบเจ็กต์เหล่านั้นไปยังแอปพลิเคชัน คุณสามารถเรียกฟังก์ชันนี้เพื่อเพิ่มบัฟเฟอร์ที่ลิงก์ไปยังคิวการส่งได้ แม้ว่าการเรียกกลับ "ส่งเสร็จสิ้น" สำหรับการเรียกใช้ฟังก์ชันนี้ก่อนหน้าจะยังไม่เริ่มทํางานก็ตาม
โปรดทราบว่าไม่ควรเชื่อมโยง aBuffer
และช่อง mNext ควรเป็น NULL หากจะมีการเพิ่มข้อมูลเพิ่มเติมทันทีหลังจากการโทรนี้ ควรใช้แฟล็ก OT_TCP_SEND_MORE_TO_COME เป็นสัญญาณบอกใบ้การติดตั้งใช้งาน TCP
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
แจ้งเพียร์การเชื่อมต่อว่าปลายทาง TCP นี้จะไม่ส่งข้อมูลเพิ่มเติม
ควรใช้เมื่อแอปพลิเคชันไม่มีข้อมูลเพิ่มเติมสำหรับส่งไปยังการเพียร์การเชื่อมต่อ สำหรับการเชื่อมต่อนี้ การอ่านค่าในระดับเดียวกันในอนาคตจะทําให้เกิดเงื่อนไข "สิ้นสุดสตรีม" และการเขียนในอนาคตในปลายทางการเชื่อมต่อนี้จะไม่สําเร็จ
เงื่อนไข "สิ้นสุดสตรีม" จะมีผลก็ต่อเมื่อเพียร์การเชื่อมต่อได้รับข้อมูลที่ให้ไว้กับสแต็ก TCP เพื่อส่งออกก่อนหน้านี้เท่านั้น
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
ทำให้ Listener TCP นี้หยุดฟังการเชื่อมต่อขาเข้า
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
มาโคร
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 และ OT_TCP_ENDPOINT_TCB_NUM_POINTERS ไว้เพื่อให้ช่อง mTcb ของ otTcpEndpoint มีขนาดเดียวกับ struct tcpcb ใน TCPlp
ซึ่งเป็นสิ่งจำเป็นเนื่องจากช่อง mTcb จะถือว่าฟิลด์ mTcb ไม่ชัดเจนในการประกาศ แต่ระบบถือว่า struct tcpcb ในการใช้งาน 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 และ OT_TCP_LISTENER_TCB_NUM_POINTERS รายการเพื่อให้ช่อง mTcbListener ของ otTcpListener มีขนาดเท่ากับ struct tcpcb_listen ใน TCPlp
ซึ่งเป็นสิ่งจำเป็นเนื่องจากฟิลด์ mTcbListen แม้จะไม่ชัดเจนในการประกาศ จะถือเป็น struct tcpcb ในการใช้งาน TCP
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598
ขนาดบัฟเฟอร์ที่แนะนำสำหรับการเชื่อมต่อ TCP ที่ข้ามการเชื่อมต่อแบบไร้สายไม่เกิน 3 ครั้ง
ในแพลตฟอร์มที่หน่วยความจำจำกัดเป็นพิเศษและในกรณีที่ไม่จำเป็นต้องใช้แบนด์วิดท์สูง ขอแนะนำให้เลือกขนาดบัฟเฟอร์ที่เล็กลงด้วยตนเอง
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157
ขนาดบัฟเฟอร์ที่แนะนำสำหรับการเชื่อมต่อ TCP ที่ข้ามผ่านการรับส่งข้อมูลแบบไร้สายจำนวนมาก
หากการเชื่อมต่อ TCP ข้ามผ่านการรับส่งข้อมูลจำนวนมาก (มากกว่า 6 ครั้ง) ขอแนะนำให้เลือกขนาดบัฟเฟอร์ขนาดใหญ่ด้วยตนเอง
แหล่งข้อมูล
หัวข้ออ้างอิง API ของ OpenThread จะมาจากซอร์สโค้ดซึ่งพร้อมใช้งานใน GitHub ดูข้อมูลเพิ่มเติมหรือมีส่วนร่วมในเอกสารประกอบของเราได้ที่แหล่งข้อมูล