TCP
تتضمن هذه الوحدة وظائف تتحكم في اتصال TCP.
ملخّص
عمليات التعداد |
|
---|---|
anonymous enum
|
تعداد يحدِّد العلامات التي تم تمريرها إلى otTcpConnect(). |
anonymous enum
|
تعداد يحدِّد العلامات التي تم تمريرها إلى otTcpSendByReference . |
otTcpDisconnectedReason
|
تعداد |
otTcpIncomingConnectionAction{
|
تعداد تحدد إجراءات الاتصال الوارد. |
تحديدات النوع |
|
---|---|
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(*
تشير معاودة الاتصال هذه إلى عدد وحدات البايت المتاحة للاستهلاك من المخزن المؤقت للاستلام. |
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)
|
تُعلِم حزمة بروتوكول التحكم بالنقل بأنّ التطبيق قد انتهى من معالجة
aNumBytes بايت من البيانات عند بداية المخزن المؤقت للاستلام وأنّ حزمة بروتوكول التحكم بالنقل لا تحتاج إلى مواصلة الاحتفاظ بتلك وحدات البايت في المخزن المؤقت للاستلام. |
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)
|
يوفر التطبيق مع سلسلة مخزن مؤقت مرتبطة تشير إلى البيانات الموجودة حاليًا في المخزن المؤقت للاستلام عبر بروتوكول التحكم بالنقل.
|
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().
أماكن إقامة | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
اقبل الاتصال الوارد. |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
تأجيل الاتصال الوارد (تجاهل بدون صوت) |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
رفض الاتصال الوارد. |
تحديدات النوع
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_قبول.
وبدلاً من ذلك، يمكن أن يرفض التطبيق قبول الاتصال الوارد. هناك طريقتان للقيام بذلك من خلال التطبيق. أولاً، إذا عرض التطبيق 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
والذاكرة التي يشير إليها، وليس نقطة نهاية بروتوكول التحكم بالنقل نفسها أو المساحة للمخازن المؤقتة للاستلام). في حالة دخول اتصال في حالة 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().
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
تُعلم معاودة الاتصال هذه التطبيق باكتمال تأكيد اتصال TCP ثلاثي الاتجاه وأنه تم إنشاء الاتصال الآن.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
تُعلم معاودة الاتصال هذه التطبيق في حال إحراز تقدم في إعادة توجيه البيانات من المخزن المؤقت للإرسال إلى المُستلِم.
معاودة الاتصال هذه غير ضرورية لعملية TCP الصحيحة. لا يمكن لمعظم التطبيقات الاعتماد فقط على استدعاء otTcpSendDone() لاسترداد المخازن المؤقتة المرتبطة بعد انتهاء حزمة بروتوكول التحكم بالنقل من استخدامها. الغرض من معاودة الاتصال هذه هو دعم التطبيقات المتقدّمة التي تستفيد من معلومات أكثر دقة حول كيفية تقدُّم الاتصال في عملية نقل البيانات إلى نظير الاتصال.
ترتبط عملية معاودة الاتصال هذه ارتباطًا وثيقًا بالمورد الاحتياطي للإرسال في بروتوكول التحكم بالنقل. يمكن اعتبار المخزن المؤقت للإرسال على أنه يحتوي على منطقتين. أولاً، توجد منطقة "قيد التشغيل" في أعلى (الجهة الأمامية) من المخزن المؤقت للإرسال. يتجاوب هذا العنوان مع البيانات التي تم إرسالها إلى المستلِم، ولكن لم يتم إقرارها بعد. ثانيًا، هناك منطقة "قائمة المهام" التي تتكوّن من جميع البيانات في المخزن المؤقت للإرسال والتي لا تكون موجودة في المنطقة "أثناء الطيران". تتوافق منطقة "قائمة المهام" مع البيانات الموضوعة في قائمة الانتظار للإرسال، ولكن لم يتم إرسالها بعد.
يتم استدعاء معاودة الاتصال استجابةً لنوعَين من الأحداث. أولاً، قد تتقلص منطقة "قيد الإرسال" للمخزن المؤقت للإرسال (على سبيل المثال، عندما يقر المستلِم بالبيانات التي أرسلناها سابقًا). ثانيًا، قد تتقلص منطقة "قائمة المهام" للمخزن المؤقت للإرسال (على سبيل المثال، تم إرسال بيانات جديدة). غالبًا ما يحدث هذين الشرطين في الوقت نفسه كاستجابة لشريحة ACK من نظير الاتصال، ولهذا يتم دمجهما في معاودة اتصال واحدة.
لا يستخدم حزمة بروتوكول التحكم بالنقل سوى وحدات البايت 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().
otTcpListener
struct otTcpListener otTcpListener
otTcpListenerInitializeArgs
struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs
تحتوي على وسيطات للدالة otTcpListenerInitialize().
otTcpReceiveAvailable
void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)
تشير معاودة الاتصال هذه إلى عدد وحدات البايت المتاحة للاستهلاك من المخزن المؤقت للاستلام.
ويتم استدعاؤه عند إضافة وحدات بايت إلى المخزن المؤقت للاستلام وعند الوصول إلى نهاية البث. إذا تم الوصول إلى نهاية مجموعة البث (أي إذا لم تتوفّر بيانات إضافية للقراءة بسبب إغلاق نظير الاتصال من نهاية الاتصال للكتابة)، تكون القيمة aEndOfStream
صحيحة. وأخيرًا، تشير السمة 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 )
تُعلِم حزمة بروتوكول التحكم بالنقل بأنّ التطبيق قد انتهى من معالجة aNumBytes
بايت من البيانات عند بداية المخزن المؤقت للاستلام وأنّ حزمة بروتوكول التحكم بالنقل لا تحتاج إلى مواصلة الاحتفاظ بتلك وحدات البايت في المخزن المؤقت للاستلام.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||
قيم الإرجاع |
|
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()). يتم على الفور إرجاع جميع الموارد التي وفّرها التطبيق لنقطة نهاية بروتوكول التحكم بالنقل هذه (المخازن المؤقتة المرتبطة بمخزن الإرسال المؤقت وذاكرة المخزن المؤقت للاستلام وبنية 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 بتتبُّع مستمع بروتوكول التحكم بالنقل وتخزين بيانات بروتوكول التحكم بالنقل واستردادها داخل aListener
. ويجب أن يتجنّب التطبيق الوصول مباشرةً إلى الحقول في aListener
أو تعديلها. إذا كان التطبيق يحتاج إلى استعادة النسخ الاحتياطي للذاكرة aListener
، يجب أن يطلب الإجراء otTcpListenerDeinitialize().
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||
قيم الإرجاع |
|
otTcpReceiveByReference
otError otTcpReceiveByReference( otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer )
يوفر التطبيق مع سلسلة مخزن مؤقت مرتبطة تشير إلى البيانات الموجودة حاليًا في المخزن المؤقت للاستلام عبر بروتوكول التحكم بالنقل.
تكون سلسلة المخزن المؤقت المرتبطة صالحة إلى أن يتم استدعاء معاودة الاتصال "استلام الطلب" في المرة التالية، أو إلى أن يتم الاتصال التالي بـ otTcpReceiveContiguify() أو otTcpCommitReceive().
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
otTcpReceiveContiguify
otError otTcpReceiveContiguify( otTcpEndpoint *aEndpoint )
إعادة تنظيم المخزن المؤقت للاستلام ليكون متجاورة بالكامل في الذاكرة.
هذا إجراء اختياري، حيث يمكن للتطبيق اجتياز سلسلة المخزن المؤقت المرتبطة التي تم الحصول عليها عن طريق طلب البيانات otTcpReceiveByReference
. قد ترغب بعض التطبيقات في استدعاء هذه الدالة لجعل المخزن المؤقت للاستلام متجاورة لتبسيط معالجة البيانات، إلا أن هذا يأتي على حساب وقت وحدة المعالجة المركزية لإعادة تنظيم البيانات في المخزن المؤقت للاستلام.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
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_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 الحجم نفسه مثل struct tcpcb في TCPlp.
يعد ذلك ضروريًا لأن الحقل mTcb، على الرغم من أنه معتم في إعلانه، يتم التعامل معه على أنه هيكلة 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اء معتم في تعريفه يتم التعامل معه على أنه هيكلة 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 من رمز المصدر المتاح على GitHub. للحصول على مزيد من المعلومات أو للمساهمة في مستنداتنا، يمكنك الاطّلاع على المراجع.