TCP
این ماژول شامل توابعی است که ارتباطات TCP را کنترل می کند.
خلاصه
شمارش ها | |
---|---|
anonymous enum | enum پرچم های ارسال شده به ()otTcpConnect را تعریف می کند. |
anonymous enum | enum پرچم های ارسال شده به otTcpSendByReference را تعریف می کند. |
otTcpDisconnectedReason | enum |
otTcpIncomingConnectionAction { | enum اقدامات اتصال ورودی را تعریف می کند. |
Typedefs | |
---|---|
otLinkedBuffer | typedefstruct otLinkedBuffer یک ساختار بافر پیوندی برای استفاده با TCP. |
otTcpAcceptDone )(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer) | typedefvoid(* این تماس برگشتی نشان می دهد که اتصال TCP اکنون برای ارتباط دو طرفه آماده است. |
otTcpAcceptReady )(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto) | typedef این پاسخ تماس نشان می دهد که یک اتصال ورودی که با این شنونده TCP مطابقت دارد وارد شده است. |
otTcpDisconnected )(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason) | typedefvoid(* این تماس برگشتی نشان می دهد که اتصال قطع شده است و دیگر نباید استفاده شود، یا اینکه یک اتصال به حالت TIME-WAIT وارد شده است. |
otTcpDisconnectedReason | typedefenum otTcpDisconnectedReason |
otTcpEndpoint | typedefstruct otTcpEndpoint |
otTcpEndpointInitializeArgs | typedefstruct otTcpEndpointInitializeArgs حاوی آرگومان هایی برای تابع otTcpEndpointInitialize() است. |
otTcpEstablished )(otTcpEndpoint *aEndpoint) | typedefvoid(* این تماس برگشتی به برنامه اطلاع می دهد که دست دادن سه طرفه 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(* این callback تعداد بایت های موجود برای مصرف از بافر دریافت را نشان می دهد. |
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 و پورت مشخص شده مطابقت دارند، تماس های این شنونده TCP را فعال کنند. |
otTcpListenerDeinitialize ( otTcpListener *aListener) | این شنونده TCP را از حالت اولیه خارج می کند. |
otTcpListenerGetContext ( otTcpListener *aListener) | void * نشانگر زمینه را که با aListener در زمان مقداردهی اولیه مرتبط بود، به دست می آورد. |
otTcpListenerGetInstance ( otTcpListener *aListener) | otInstance را به دست می آورد که با aListener در زمان اولیه سازی مرتبط بود. |
otTcpListenerInitialize ( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs) | یک شنونده 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) | باعث می شود این شنونده TCP گوش دادن برای اتصالات ورودی را متوقف کند. |
سازه ها | |
---|---|
otLinkedBuffer | یک ساختار بافر پیوندی برای استفاده با TCP. |
otTcpEndpoint | یک نقطه پایانی TCP را نشان می دهد. |
otTcpEndpointInitializeArgs | حاوی آرگومان هایی برای تابع otTcpEndpointInitialize() است. |
otTcpListener | یک شنونده TCP را نشان می دهد. |
otTcpListenerInitializeArgs | حاوی آرگومان هایی برای تابع otTcpListenerInitialize() است. |
شمارش ها
شماره ناشناس
anonymous enum
پرچم های ارسال شده به otTcpSendByReference
را تعریف می کند.
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
اقدامات اتصال ورودی را تعریف می کند.
این در پاسخ به تماس otTcpAcceptReady () استفاده می شود.
Typedefs
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
یک ساختار بافر پیوندی برای استفاده با TCP.
یک ساختار واحد otLinkedBuffer به آرایه ای از بایت ها در حافظه از طریق mData و mLength ارجاع می دهد. فیلد mNext برای تشکیل زنجیره ای از ساختارهای otLinkedBuffer استفاده می شود.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
این تماس برگشتی نشان می دهد که اتصال TCP اکنون برای ارتباط دو طرفه آماده است.
در مورد TCP Fast Open، این ممکن است قبل از اینکه عملاً دست دادن اتصال TCP کامل شود، باشد. برنامه با نشانگرهای زمینه هم برای شنونده TCP که اتصال را پذیرفته و هم برای نقطه پایانی TCP که در آن پذیرفته شده است ارائه می شود. زمینه ارائه شده مربوط به شنونده TCP است.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
این پاسخ تماس نشان می دهد که یک اتصال ورودی که با این شنونده TCP مطابقت دارد وارد شده است.
پاسخ معمولی این است که برنامه اتصال ورودی را بپذیرد. این کار را با پر کردن aAcceptInto
با اشارهگر به نقطه otTcpEndpoint انجام میدهد که در آن اتصال ورودی را میپذیرد. این otTcpEndpoint باید قبلاً با استفاده از ()otTcpEndpointInitialize مقداردهی اولیه شود. سپس، برنامه OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT را برمیگرداند.
از طرف دیگر، برنامه میتواند پذیرش اتصال ورودی را رد کند. دو راه برای این برنامه وجود دارد. ابتدا، اگر برنامه OT_TCP_INCOMING_CONNECTION_ACTION_DEFER را برگرداند، OpenThread بیصدا درخواست برقراری اتصال را نادیده میگیرد. همتای اتصال احتمالاً درخواست را مجدداً ارسال می کند، در این مرحله تماس مجدد دوباره فراخوانی می شود. اگر منابع در حال حاضر برای پذیرش اتصال در دسترس نباشند، ارزشمند است، اما ممکن است زمانی که همتای اتصال تلاش برای برقراری اتصال خود را مجددا ارسال می کند، در دسترس باشند. دوم، اگر برنامه OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE را برگرداند، OpenThread یک پیام "اتصال رد شد" را به میزبانی که سعی در برقراری اتصال دارد ارسال می کند. اگر برنامه اتصال ورودی را رد کند، نیازی به پر کردن aAcceptInto
نیست.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
برمی گرداند | شرح نحوه رسیدگی به اتصال ورودی. |
otTcp قطع شد
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
این تماس برگشتی نشان می دهد که اتصال قطع شده است و دیگر نباید استفاده شود، یا اینکه یک اتصال به حالت TIME-WAIT وارد شده است.
اگر تلاش برای برقراری اتصال (که با فراخوانی otTcpConnect() آغاز می شود) با شکست مواجه شود یا هر نقطه پس از آن (مثلاً اگر زمان اتصال تمام شود یا یک قطعه RST از همتای اتصال دریافت شود) ممکن است رخ دهد. هنگامی که این فراخوانی فعال شد، تمام منابعی که برنامه برای این اتصال ارائه کرده است (به عنوان مثال، هر otLinkedBuffers
و حافظه ای که به آنها ارجاع می دهند، اما نه خود نقطه پایانی TCP یا فضای بافرهای دریافتی) را می توان بازیابی کرد. در صورت ورود اتصال به حالت TIME-WAIT، این تماس دوبار، یک بار پس از ورود به حالت 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() است.
otTcp تاسیس شد
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
این تماس برگشتی به برنامه اطلاع می دهد که دست دادن سه طرفه TCP کامل شده است و اکنون اتصال برقرار شده است.
جزئیات | |||
---|---|---|---|
مولفه های |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
این پاسخ تماس به برنامه اطلاع میدهد که آیا در انتقال دادهها از بافر ارسال به گیرنده پیشرفتی صورت گرفته است.
این فراخوانی برای عملکرد صحیح TCP ضروری نیست. اکثر برنامهها فقط میتوانند به فراخوانی ()otTcpSendDone برای بازیابی بافرهای پیوند شده پس از اتمام پشته TCP با استفاده از آنها تکیه کنند. هدف از این فراخوانی پشتیبانی از برنامه های کاربردی پیشرفته است که از اطلاعات دقیق تری در مورد چگونگی پیشرفت اتصال در انتقال داده ها به همتای اتصال بهره می برند.
عملکرد این پاسخ تماس نزدیک به بافر ارسال TCP مرتبط است. بافر ارسال را می توان به عنوان داشتن دو منطقه درک کرد. اول، منطقه "در پرواز" در سر (جلو) بافر ارسال وجود دارد. این مربوط به داده هایی است که برای گیرنده ارسال شده است، اما هنوز تایید نشده است. دوم، منطقه "backlog" وجود دارد که شامل تمام داده های موجود در بافر ارسال است که در منطقه "in-flight" نیست. منطقه "backlog" مربوط به داده هایی است که برای ارسال در صف قرار می گیرند، اما هنوز ارسال نشده اند.
تماس برگشتی در پاسخ به دو نوع رویداد فراخوانی می شود. اول، منطقه "در پرواز" بافر ارسال ممکن است کوچک شود (به عنوان مثال، زمانی که گیرنده دادههایی را که قبلا ارسال کردهایم تایید میکند). ثانیاً، ممکن است منطقه "بازگشت" بافر ارسال کوچک شود (به عنوان مثال، داده های جدید ارسال شده است). این دو حالت اغلب در یک زمان و در پاسخ به یک قطعه ACK از همتای اتصال رخ میدهند، به همین دلیل است که آنها در یک تماس برگشتی ترکیب میشوند.
پشته TCP فقط از بایت های aInSendBuffer
در انتهای بافر ارسال استفاده می کند. هنگامی که aInSendBuffer
به مقدار x کاهش می یابد، به این معنی است که x بایت اضافی که قبلا در سر بافر ارسال بودند، دیگر بخشی از بافر ارسال نیستند و اکنون می توانند توسط برنامه بازیابی شوند (یعنی بازنویسی شوند). توجه داشته باشید که خود ساختار otLinkedBuffer فقط زمانی قابل بازیابی است که تمام بایت هایی که به آنها ارجاع می دهد دیگر بخشی از بافر ارسال نباشند.
این فراخوانی ()otTcpSendDone را به معنای زیر جمعبندی میکند: برنامهها میتوانند با مقایسه aInSendBuffer
با تعداد بایتهایی که در هر بافر پیوندی وجود دارد، تعیین کنند که چه زمانی بافرهای مرتبط قابل بازیابی هستند. با این حال، ما انتظار داریم که otTcpSendDone() که مستقیماً نشان می دهد کدام otLinkedBuffer را می توان بازیابی کرد، بسیار ساده تر برای استفاده باشد. اگر هر دو فراخوان ثبت شده و توسط یک رویداد راهاندازی شوند (مثلاً همان بخش ACK دریافت شده)، سپس callback ()otTcpSendDone ابتدا و به دنبال آن این تماس مجدد راهاندازی میشود.
علاوه بر این، این پاسخ تماس aBacklog
ارائه میکند که نشان میدهد چند بایت داده در بافر ارسال هنوز در حال پرواز نیستند. برای برنامههایی که فقط میخواهند دادهها را زمانی به بافر ارسال اضافه کنند که اطمینان حاصل شود که به زودی ارسال میشود، ممکن است مطلوب باشد که فقط زمانی که aBacklog
کوچک (0 یا نزدیک به 0) باشد، داده ارسال شود. به عنوان مثال، یک برنامه کاربردی ممکن است aBacklog
استفاده کند تا بتواند با حذف یا جمعآوری دادهها به جمعآوری صف واکنش نشان دهد تا از ایجاد بک لاگ داده جلوگیری کند.
پس از تماس با otTcpSendByReference() یا otTcpSendByExtension() با تعداد بایت های مثبت، فراخوانی otTcpForwardProgress() تضمین می شود که نشان می دهد چه زمانی بایت هایی که به بافر ارسال اضافه شده اند ارسال می شوند. تماس با otTcpForwardProgress() ممکن است بلافاصله پس از اضافه شدن بایت ها به بافر ارسال (در صورتی که برخی از آن بایت ها فوراً ارسال شوند، که بک لاگ را کاهش می دهد) یا زمانی در آینده (زمانی که اتصال برخی یا همه را ارسال کرد) انجام شود. داده ها، کاهش عقب ماندگی). منظور ما از "بلافاصله" این است که فراخوان بلافاصله برای اجرا در یک 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)
این callback تعداد بایت های موجود برای مصرف از بافر دریافت را نشان می دهد.
هر زمان که بایت ها به بافر دریافت اضافه شوند و زمانی که به انتهای جریان می رسند، فراخوانی می شود. اگر به پایان جریان رسیده باشد (یعنی اگر داده دیگری برای خواندن در دسترس نباشد زیرا همتای اتصال انتهای اتصال خود را برای نوشتن بسته است)، آنگاه aEndOfStream
درست است. در نهایت، aBytesRemaining
نشان میدهد که چه مقدار ظرفیت در بافر دریافت برای نگهداری دادههای اضافی که وارد میشود، باقی مانده است.
جزئیات | |||||||||
---|---|---|---|---|---|---|---|---|---|
مولفه های |
|
otTcpSendDone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
این فراخوانی به برنامه اطلاع میدهد که دادههای موجود در aData
ارائهشده توسط همتای اتصال تأیید شدهاند و aData
و دادههای موجود در آن میتوانند توسط برنامه بازیابی شوند.
تضمین می شود که aData
با آنهایی که از طریق otTcpSendByReference() به TCP منتقل می شود، یکسان هستند، از جمله هر پسوندی که از طریق 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 Fast Open باید با استفاده از 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 و پورت مشخص شده مطابقت دارند، تماس های این شنونده TCP را فعال کنند.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
این شنونده TCP را از حالت اولیه خارج می کند.
این بدان معنی است که OpenThread دیگر این شنونده TCP را ردیابی نمی کند و تمام منابعی را که به صورت داخلی برای این شنونده TCP اختصاص داده است، اختصاص می دهد. برنامه میتواند از حافظه پشتیبان TCP شنونده هر طور که صلاح میداند دوباره استفاده کند.
اگر شنونده 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 )
یک شنونده TCP را راه اندازی می کند.
فراخوانی این تابع باعث می شود که OpenThread شنونده TCP را ردیابی کند و داده های TCP را در aListener
ذخیره و بازیابی کند. برنامه باید از دسترسی مستقیم یا اصلاح فیلدها در aListener
خودداری کند. اگر برنامه نیاز به بازیابی حافظه پشتیبان aListener
داشته باشد، باید otTcpListenerDeinitialize() را فراخوانی کند.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
ارزش های بازگشتی |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
داده های ارجاع زنجیره بافر مرتبطی را که در حال حاضر در بافر دریافت TCP است به برنامه ارائه می دهد.
زنجیره بافر مرتبط تا زمانی که فراخوانی بعدی «receive ready» فراخوانی شود، یا تا زمانی که تماس بعدی با 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 است. آنها نباید توسط برنامه اصلاح شوند تا زمانی که یک فراخوان "ارسال انجام شد" مالکیت آن اشیاء را به برنامه بازگرداند. فراخوانی این تابع برای افزودن بافر پیوندی دیگری به صف ارسال قابل قبول است، حتی اگر پاسخ تماس «ارسال انجام شد» برای فراخوانی قبلی این تابع هنوز فعال نشده باشد.
توجه داشته باشید که aBuffer
نباید زنجیره ای باشد. فیلد mNext آن باید NULL باشد. اگر بلافاصله پس از این تماس دادههای اضافی اضافه میشود، پرچم OT_TCP_SEND_MORE_TO_COME باید به عنوان راهنمایی برای اجرای TCP استفاده شود.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
ارزش های بازگشتی |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
به همتای اتصال اطلاع می دهد که این نقطه پایانی TCP داده بیشتری ارسال نخواهد کرد.
این باید زمانی استفاده شود که برنامه داده دیگری برای ارسال به همتای اتصال ندارد. برای این اتصال، خواندن های آینده در همتای اتصال منجر به وضعیت "پایان جریان" می شود و نوشته های آینده در این نقطه پایانی اتصال با شکست مواجه می شوند.
شرط «پایان جریان» تنها پس از دریافت دادههایی که قبلاً به پشته TCP برای ارسال ارسال شده بود، توسط همتای اتصال دریافت شده باشد اعمال میشود.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
باعث می شود این شنونده 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 به اندازه ساختار tcpcb در TCPlp باشد.
این امر ضروری است زیرا فیلد mTcb، اگرچه در اعلان خود مات است، اما در اجرای TCP به عنوان struct tcpcb در نظر گرفته می شود.
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 اندازه ساختار 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 یا بیشتر) عبور می کند، ممکن است توصیه شود که اندازه بافر بزرگ را به صورت دستی انتخاب کنید.
منابع
موضوعات مرجع OpenThread API از کد منبع موجود در GitHub سرچشمه می گیرند. برای اطلاعات بیشتر، یا مشارکت در اسناد ما، به منابع مراجعه کنید.
،TCP
این ماژول شامل توابعی است که ارتباطات TCP را کنترل می کند.
خلاصه
شمارش ها | |
---|---|
anonymous enum | enum پرچم های ارسال شده به ()otTcpConnect را تعریف می کند. |
anonymous enum | enum پرچم های ارسال شده به otTcpSendByReference را تعریف می کند. |
otTcpDisconnectedReason | enum |
otTcpIncomingConnectionAction { | enum اقدامات اتصال ورودی را تعریف می کند. |
Typedefs | |
---|---|
otLinkedBuffer | typedefstruct otLinkedBuffer یک ساختار بافر پیوندی برای استفاده با TCP. |
otTcpAcceptDone )(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer) | typedefvoid(* این تماس برگشتی نشان می دهد که اتصال TCP اکنون برای ارتباط دو طرفه آماده است. |
otTcpAcceptReady )(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto) | typedef این پاسخ تماس نشان می دهد که یک اتصال ورودی که با این شنونده TCP مطابقت دارد وارد شده است. |
otTcpDisconnected )(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason) | typedefvoid(* این تماس برگشتی نشان می دهد که اتصال قطع شده است و دیگر نباید استفاده شود، یا اینکه یک اتصال به حالت TIME-WAIT وارد شده است. |
otTcpDisconnectedReason | typedefenum otTcpDisconnectedReason |
otTcpEndpoint | typedefstruct otTcpEndpoint |
otTcpEndpointInitializeArgs | typedefstruct otTcpEndpointInitializeArgs حاوی آرگومان هایی برای تابع otTcpEndpointInitialize() است. |
otTcpEstablished )(otTcpEndpoint *aEndpoint) | typedefvoid(* این تماس برگشتی به برنامه اطلاع می دهد که دست دادن سه طرفه 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(* این callback تعداد بایت های موجود برای مصرف از بافر دریافت را نشان می دهد. |
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 و پورت مشخص شده مطابقت دارند، تماس های این شنونده TCP را فعال کنند. |
otTcpListenerDeinitialize ( otTcpListener *aListener) | این شنونده TCP را از حالت اولیه خارج می کند. |
otTcpListenerGetContext ( otTcpListener *aListener) | void * نشانگر زمینه را که با aListener در زمان مقداردهی اولیه مرتبط بود، به دست می آورد. |
otTcpListenerGetInstance ( otTcpListener *aListener) | otInstance را به دست می آورد که با aListener در زمان اولیه سازی مرتبط بود. |
otTcpListenerInitialize ( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs) | یک شنونده 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) | باعث می شود این شنونده TCP گوش دادن برای اتصالات ورودی را متوقف کند. |
سازه ها | |
---|---|
otLinkedBuffer | یک ساختار بافر پیوندی برای استفاده با TCP. |
otTcpEndpoint | یک نقطه پایانی TCP را نشان می دهد. |
otTcpEndpointInitializeArgs | حاوی آرگومان هایی برای تابع otTcpEndpointInitialize() است. |
otTcpListener | یک شنونده TCP را نشان می دهد. |
otTcpListenerInitializeArgs | حاوی آرگومان هایی برای تابع otTcpListenerInitialize() است. |
شمارش ها
شماره ناشناس
anonymous enum
پرچم های ارسال شده به otTcpSendByReference
را تعریف می کند.
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
اقدامات اتصال ورودی را تعریف می کند.
این در پاسخ به تماس otTcpAcceptReady () استفاده می شود.
Typedefs
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
یک ساختار بافر پیوندی برای استفاده با TCP.
یک ساختار واحد otLinkedBuffer به آرایه ای از بایت ها در حافظه از طریق mData و mLength ارجاع می دهد. فیلد mNext برای تشکیل زنجیره ای از ساختارهای otLinkedBuffer استفاده می شود.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
این تماس برگشتی نشان می دهد که اتصال TCP اکنون برای ارتباط دو طرفه آماده است.
در مورد TCP Fast Open، این ممکن است قبل از اینکه عملاً دست دادن اتصال TCP کامل شود، باشد. برنامه با نشانگرهای زمینه هم برای شنونده TCP که اتصال را پذیرفته و هم برای نقطه پایانی TCP که در آن پذیرفته شده است ارائه می شود. زمینه ارائه شده مربوط به شنونده TCP است.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
این پاسخ تماس نشان می دهد که یک اتصال ورودی که با این شنونده TCP مطابقت دارد وارد شده است.
پاسخ معمولی این است که برنامه اتصال ورودی را بپذیرد. این کار را با پر کردن aAcceptInto
با اشارهگر به نقطه otTcpEndpoint انجام میدهد که در آن اتصال ورودی را میپذیرد. این otTcpEndpoint باید قبلاً با استفاده از ()otTcpEndpointInitialize مقداردهی اولیه شود. سپس، برنامه OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT را برمیگرداند.
از طرف دیگر، برنامه میتواند پذیرش اتصال ورودی را رد کند. دو راه برای این برنامه وجود دارد. ابتدا، اگر برنامه OT_TCP_INCOMING_CONNECTION_ACTION_DEFER را برگرداند، OpenThread بیصدا درخواست برقراری اتصال را نادیده میگیرد. همتای اتصال احتمالاً درخواست را مجدداً ارسال می کند، در این مرحله تماس مجدد دوباره فراخوانی می شود. اگر منابع در حال حاضر برای پذیرش اتصال در دسترس نباشند، ارزشمند است، اما ممکن است زمانی که همتای اتصال تلاش برای برقراری اتصال خود را مجددا ارسال می کند، در دسترس باشند. دوم، اگر برنامه OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE را برگرداند، OpenThread یک پیام "اتصال رد شد" را به میزبانی که سعی در برقراری اتصال دارد ارسال می کند. اگر برنامه اتصال ورودی را رد کند، نیازی به پر کردن aAcceptInto
نیست.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
برمی گرداند | شرح نحوه رسیدگی به اتصال ورودی. |
otTcp قطع شد
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
این تماس برگشتی نشان می دهد که اتصال قطع شده است و دیگر نباید استفاده شود، یا اینکه یک اتصال به حالت TIME-WAIT وارد شده است.
اگر تلاش برای برقراری اتصال (که با فراخوانی otTcpConnect() آغاز می شود) با شکست مواجه شود یا هر نقطه پس از آن (مثلاً اگر زمان اتصال تمام شود یا یک قطعه RST از همتای اتصال دریافت شود) ممکن است رخ دهد. هنگامی که این فراخوانی فعال شد، تمام منابعی که برنامه برای این اتصال ارائه کرده است (به عنوان مثال، هر otLinkedBuffers
و حافظه ای که به آنها ارجاع می دهند، اما نه خود نقطه پایانی TCP یا فضای بافرهای دریافتی) را می توان بازیابی کرد. در صورت ورود اتصال به حالت TIME-WAIT، این تماس دوبار، یک بار پس از ورود به حالت 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() است.
otTcp تاسیس شد
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
این تماس برگشتی به برنامه اطلاع می دهد که دست دادن سه طرفه TCP کامل شده است و اکنون اتصال برقرار شده است.
جزئیات | |||
---|---|---|---|
مولفه های |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
اگر پیشرفت پیش رو در انتقال داده ها از بافر ارسال به گیرنده انجام شود ، این پاسخ به تماس را اطلاع می دهد.
این پاسخ به تماس برای عملکرد صحیح TCP ضروری نیست. بیشتر برنامه ها فقط می توانند پس از انجام پشته TCP با استفاده از آنها ، به بازپرداخت OttCpsEndDone () متکی باشند. هدف از این پاسخ به تماس ، پشتیبانی از برنامه های پیشرفته است که از اطلاعات ریز و درشت در مورد چگونگی پیشرفت اتصال در انتقال داده ها به همسالان اتصال بهره مند می شوند.
این عملیات پاسخ به تماس از نزدیک با بافر ارسال TCP گره خورده است. بافر ارسال را می توان به عنوان داشتن دو منطقه درک کرد. اول ، منطقه "در پرواز" در سر (جلو) بافر ارسال وجود دارد. این مطابق با داده هایی است که به گیرنده ارسال شده است ، اما هنوز تأیید نشده است. دوم ، منطقه "Backlog" وجود دارد ، که شامل تمام داده های موجود در بافر ارسال است که در منطقه "در پرواز" نیست. منطقه "Backlog" با داده هایی که برای ارسال در صف قرار گرفته است مطابقت دارد ، اما هنوز ارسال نشده است.
پاسخ به تماس در پاسخ به دو نوع رویداد فراخوانی می شود. اول ، منطقه "در پرواز" بافر ارسال ممکن است کوچک شود (به عنوان مثال ، هنگامی که گیرنده داده هایی را که قبلاً ارسال کرده ایم تصدیق می کند). دوم ، منطقه "عقب مانده" از بافر ارسال ممکن است کوچک شود (به عنوان مثال ، داده های جدید ارسال شد). این دو شرط اغلب در همان زمان اتفاق می افتد ، در پاسخ به یک بخش ACK از همسالان اتصال ، به همین دلیل آنها در یک پاسخ به تماس واحد ترکیب می شوند.
پشته TCP فقط از بایت های aInSendBuffer
در دم بافر ارسال استفاده می کند. هنگامی که aInSendBuffer
با مقدار X کاهش می یابد ، این بدان معنی است که X بایت های اضافی که قبلاً در راس بافر ارسال بودند ، دیگر بخشی از بافر ارسال نیستند و اکنون می توان با استفاده از برنامه بازپس گیری کرد (یعنی رونویسی). توجه داشته باشید که ساختار OtlinkedBuffer خود فقط می تواند پس از همه بایت هایی که منابع آن دیگر بخشی از بافر ارسال نیستند ، پس بگیرند.
این پاسخ به تماس ، OttCpsEndDone () را به معنای زیر می گذارد: برنامه ها می توانند با مقایسه aInSendBuffer
با تعداد بایت در هر بافر مرتبط ، چه زمانی را می توان بافرهای پیوند یافته پس گرفت. با این حال ، ما انتظار داریم که Ottcpsenddone () ، که مستقیماً انتقال می دهد که می توان OtLinkedBuffers را پس گرفت ، استفاده از آن بسیار ساده تر باشد. اگر هر دو تماس تلفنی ثبت شده باشند و توسط همان رویداد ایجاد شوند (به عنوان مثال ، همان بخش ACK دریافت شده) ، پس از آن پاسخ به تماس با ottcpsenddone () انجام می شود و پس از آن این پاسخ به تماس.
علاوه بر این ، این پاسخ به تماس ، aBacklog
ارائه می دهد ، که نشان می دهد چند بایت داده در بافر ارسال هنوز در حال پرواز نیست. برای برنامه هایی که فقط می خواهند داده ها را به بافر ارسال اضافه کنند ، در صورت اطمینان از ارسال به زودی ، ممکن است مطلوب باشد که فقط در صورت کوچک بودن aBacklog
داده ها را ارسال کنید (0 یا نزدیک به 0). به عنوان مثال ، یک برنامه ممکن است از aBacklog
استفاده کند تا بتواند با رها کردن یا جمع آوری داده ها در صفحات صفات واکنش نشان دهد تا از ایجاد یک برگه داده جلوگیری شود.
پس از تماس با ottcpsendbyreference () یا ottcpsendbyextension () با تعداد مثبت بایت ، پاسخ به تماس با ottcpforwardprogress () تضمین می شود که مشخص شود که چه زمانی بایت هایی که به بافر ارسال شده اضافه شده اند ، ارسال می شوند. تماس با ottcpforwardprogress () ممکن است بلافاصله پس از اضافه شدن بایت به بافر ارسال (اگر بعضی از این بایت ها بلافاصله ارسال شوند ، کاهش پس زمینه) یا بعضی اوقات در آینده (پس از ارسال اتصال برخی یا همه داده ها ، کاهش پس زمینه). منظور ما از "بلافاصله" ، منظور ما این است که پاسخ به تماس بلافاصله برای اجرای در یک وظیفه برنامه ریزی شده است. برای جلوگیری از پیچیدگی مربوط به بازگرداندن ، پاسخ به تماس ottcpforwardprogress () هرگز از توابع ottcpsendbyreference () یا ottcpsendbyextension () فراخوانی نمی شود.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
|
ottcpincomingconnectionaction
enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction
اقدامات اتصال ورودی را تعریف می کند.
این در پاسخ به تماس ottcpacceptready () استفاده می شود.
سرپرست
struct otTcpListener otTcpListener
othcplistenerinitializeargs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
حاوی استدلالهایی به عملکرد Ottcplistenerinitialize () است.
قابل استفاده
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
این پاسخ به تماس تعداد بایت های موجود برای مصرف از بافر دریافت را نشان می دهد.
هر زمان که بایت به بافر دریافت اضافه شود و به پایان رسید پایان جریان می شود ، خوانده می شود. اگر پایان جریان به دست آمده باشد (به عنوان مثال ، اگر اطلاعات بیشتری برای خواندن در دسترس نباشد زیرا همسالان اتصال انتهای اتصال خود را برای نوشتن بسته است) ، پس aEndOfStream
درست است. سرانجام ، aBytesRemaining
نشان می دهد که چقدر ظرفیت در بافر دریافت برای نگه داشتن داده های اضافی که وارد می شود باقی مانده است.
جزئیات | |||||||||
---|---|---|---|---|---|---|---|---|---|
مولفه های |
|
othcpsenddone
void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)
این پاسخ به برنامه به برنامه اطلاع می دهد که داده های موجود در aData
ارائه شده توسط همسالان اتصال تأیید شده است و aData
و داده های موجود در آن می توانند توسط برنامه پس گرفته شوند.
aData
تضمین می شود که با مواردی که از طریق OttCpsEndByReference () به TCP منتقل می شوند ، از جمله هرگونه پسوندی که از طریق OTTCPSENDBYEXTENSION () انجام می شود ، یکسان است.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
|
کارکرد
othcpabort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
اتصال TCP مرتبط با این نقطه پایانی TCP را به زور پایان می دهد.
این بلافاصله باعث می شود تا نقطه پایانی TCP برای استفاده دیگر برای اتصال دیگری رایگان شود و بافر ارسال و دریافت را خالی کند و مالکیت هرگونه داده ارائه شده توسط برنامه در OttcpsEndByReference () و ottcpsendbyextension () را به برنامه بازگرداند. تماس و حافظه TCP Endpoint و حافظه برای بافر دریافت با نقطه پایانی TCP در ارتباط است.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
othcpbind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
نقطه پایانی TCP را به آدرس و درگاه IP متصل می کند.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
ottcpcommitreceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
به پشته TCP اطلاع می دهد که برنامه در شروع بافر دریافت بایت ، پردازش aNumBytes
از داده ها را به پایان رسانده است و پشته TCP نیازی به حفظ آن بایت ها در بافر دریافت ندارد.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
ارزش های بازگشتی |
|
othcpconct
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
میزبان و پورت از راه دور را برای این اتصال ثبت می کند.
TCP Fast Open باید با استفاده از aFlags
فعال یا غیرفعال شود. در صورت غیرفعال شدن ، آنگاه دستکاری اتصال TCP بلافاصله آغاز می شود. در صورت فعال بودن ، این عملکرد صرفاً میزبان و درگاه از راه دور را ثبت می کند ، و دست ساز اتصال TCP فقط در اولین تماس به otTcpSendByReference()
اتفاق می افتد.
اگر TCP Fast Open غیرفعال باشد ، تماس گیرنده باید منتظر پاسخ به تماس otTcpEstablished
باشد که نشان می دهد دستکاری اتصال TCP قبل از شروع ارسال داده ها انجام می شود ، با فراخوانی otTcpSendByReference()
.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
ارزش های بازگشتی |
|
ottcpendpointdeinitializeizializeizialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
این نقطه پایانی TCP را deinitialized می کند.
این بدان معنی است که Openthread دیگر این نقطه پایان TCP را پیگیری نمی کند و تمام منابعی را که در داخل برای این نقطه پایانی TCP اختصاص داده است ، معامله می کند. برنامه می تواند از حافظه پشتیبان از نقطه پایانی TCP به عنوان مناسب استفاده کند.
اگر با یک اتصال TCP زنده مطابقت داشته باشد ، اتصال به صورت غیرقانونی خاتمه می یابد (مانند OttcPabort () ). کلیه منابعی که برنامه برای این نقطه پایانی TCP ارائه داده است (بافر های مرتبط برای بافر ارسال ، حافظه برای بافر دریافت ، ساختار aEndpoint
و غیره) بلافاصله به برنامه بازگردانده می شوند.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
ottcpendpointgetcontext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
نشانگر زمینه ای را که پس از اولیه سازی با aEndpoint
همراه بود ، بدست می آورد.
جزئیات | |||
---|---|---|---|
مولفه های |
| ||
برمی گرداند | نشانگر زمینه مرتبط با aEndpoint . |
ottcpendpointgetinstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
پس از اولیه سازی ، اوتینی که با aEndpoint
همراه بود ، به دست می آورد.
جزئیات | |||
---|---|---|---|
مولفه های |
| ||
برمی گرداند | نشانگر otinstance مرتبط با aEndpoint . |
othcpendpointinitialize
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 Endpoint را بدست می آورد.
اگر این سوکت در حالت متصل نباشد ، محتوای میزبان و بندر ممکن است بی نظیر باشد.
جزئیات | |||
---|---|---|---|
مولفه های |
| ||
برمی گرداند | میزبان و بندر همکار اتصال aEndpoint . |
با صدای بلند
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
باعث اتصالات TCP ورودی می شود که با آدرس IP و پورت مشخص شده مطابقت دارند تا این تماس های شنونده TCP را تحریک کنند.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
بی نظیر کردن
otError otTcpListenerDeinitialize( otTcpListener *aListener )
این شنونده TCP را تغییر دهید.
این بدان معناست که Openthread دیگر این شنونده TCP را ردیابی نمی کند و تمام منابعی را که در داخل برای این شنونده TCP اختصاص داده است ، معامله می کند. این برنامه می تواند از حافظه پشتیبان شنونده TCP استفاده مجدد کند.
اگر شنونده TCP در حال گوش دادن است ، گوش دادن را متوقف می کند.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
ottcplistengergetcontext
void * otTcpListenerGetContext( otTcpListener *aListener )
نشانگر زمینه ای را که پس از اولیه سازی با aListener
همراه بود ، بدست می آورد.
جزئیات | |||
---|---|---|---|
مولفه های |
| ||
برمی گرداند | نشانگر زمینه مرتبط با aListener . |
ottcplistenergetinstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
پس از اولیه سازی ، اوتینیایی را که با aListener
همراه بود به دست می آورد.
جزئیات | |||
---|---|---|---|
مولفه های |
| ||
برمی گرداند | نشانگر otinstance مرتبط با aListener . |
با استفاده از
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
یک شنونده TCP را آغاز می کند.
فراخوانی این عملکرد باعث می شود Openthread از شنونده TCP پیگیری کند و داده های TCP را در داخل aListener
ذخیره و بازیابی کند. برنامه باید از دسترسی مستقیم یا اصلاح زمینه ها در aListener
خودداری کند. اگر برنامه نیاز به بازپرداخت حافظه aListener
دارد ، باید آن را با ottcplistenerdeinitialize () بنامد.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
ارزش های بازگشتی |
|
OttcpreceiveByreference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
برنامه را با داده های ارجاع زنجیره ای بافر مرتبط در حال حاضر در TCP دریافت بافر ارائه می دهد.
زنجیره بافر پیوند یافته تا زمانی که درخواست تماس بعدی "دریافت آماده" باشد ، معتبر است ، یا تا زمان تماس بعدی به ottcpreceivecontiguify () یا ottcpcommitreceive () .
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
othcpreceivecontiguify
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 است. آنها نباید توسط برنامه اصلاح شوند تا زمانی که "ارسال ارسال شده" مالکیت آن اشیاء را به برنامه بازگرداند. قابل قبول است که با این عملکرد تماس بگیرید تا یک بافر پیوند یافته دیگر به صف ارسال اضافه شود ، حتی اگر پاسخ تماس "ارسال شده" برای دعوت قبلی این عملکرد هنوز اخراج نشده است.
توجه داشته باشید که aBuffer
نباید زنجیر شود. قسمت mnext آن باید تهی باشد. اگر داده های اضافی بلافاصله پس از این تماس اضافه شود ، باید از پرچم OT_TCP_SEND_MOR_TO_FOME به عنوان اشاره ای به اجرای TCP استفاده شود.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
ارزش های بازگشتی |
|
ottcpsendendofstream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
به همکار اتصال اطلاع می دهد که این نقطه پایانی TCP داده های بیشتری را ارسال نمی کند.
این باید زمانی استفاده شود که برنامه اطلاعات بیشتری برای ارسال به همسالان اتصال نداشته باشد. برای این اتصال ، آینده خوانده شده در مورد اتصال همتا منجر به شرایط "پایان جریان" خواهد شد و آینده می نویسد در این نقطه پایان اتصال شکست خواهد خورد.
شرایط "پایان جریان" فقط پس از هرگونه داده ای که قبلاً در پشته TCP ارائه شده بود برای ارسال توسط همسالان دریافت شده است.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
فهرست بندی
otError otTcpStopListening( otTcpListener *aListener )
این شنونده 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 دارای اندازه ساختار TCPCB در TCPLP باشد.
این امر ضروری است زیرا میدان MTCB ، اگرچه در اعلامیه خود مات است ، اما در اجرای TCP به عنوان ساختار TCPCB رفتار می شود.
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 به اندازه ساختار tcpcb_listen در tcplp.
این امر ضروری است زیرا میدان mtcblisten ، گرچه در اعلامیه خود مات است ، اما در اجرای TCP به عنوان ساختار TCPCB رفتار می شود.
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 یا بیشتر) را طی کند ، ممکن است توصیه شود که یک اندازه بافر بزرگ را به صورت دستی انتخاب کنید.
منابع
موضوعات مرجع OpenThread API از کد منبع موجود در GitHub سرچشمه می گیرند. برای اطلاعات بیشتر، یا مشارکت در اسناد ما، به منابع مراجعه کنید.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates. The OPENTHREAD and related marks are trademarks of the Thread Group and are used under license.
تاریخ آخرین بهروزرسانی 2023-12-01 بهوقت ساعت هماهنگ جهانی.