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)
|
يتم إبلاغ حزمة TCP بأن التطبيق قد انتهى من معالجة
aNumBytes بايت من البيانات في بداية المخزن المؤقت للاستلام وأنّ حزمة TCP لا تحتاج إلى مواصلة الاحتفاظ بتلك وحدات البايت في المخزن المؤقت للاستلام. |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
يتم تسجيل المضيف البعيد والمنفذ لهذا الاتصال.
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
تتم إزالة نقطة نهاية بروتوكول TCP هذه.
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
يحصل على مؤشر السياق المرتبط بـ
aEndpoint عند الإعداد. |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
تحصل على المثيل الذي تم ربطه بـ
aEndpoint عند الإعداد. |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
إعداد نقطة نهاية TCP.
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
تحصل على مؤشر لنقطة نهاية TCP&& محلية على الجهاز.
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
تحصل على مؤشر لنقطة نهاية TCP's خاصة بمضيف ومنفذ TCP.
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
يؤدي إلى وجود اتصالات TCP الواردة التي تطابق عنوان IP والمنفذ المحدد لتشغيل استدعاءات TCP هذه.
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
يؤدي هذا الإعداد إلى بدء تشغيل أداة معالجة بروتوكول TCP هذه.
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
يحصل على مؤشر السياق المرتبط بـ
aListener عند الإعداد. |
otTcpListenerGetInstance(otTcpListener *aListener)
|
تحصل على المثيل الذي تم ربطه بـ
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 هذا عن الاستماع للاتصالات الواردة.
|
الهياكل |
|
---|---|
otLinkBuffer |
بنية ذاكرة تخزين مؤقت مرتبطة للاستخدام مع بروتوكول TCP |
otTcpEndpoint |
هذه البنية تمثل نقطة نهاية TCP. |
otTcpEndpointInitializeArgs |
تتضمن هذه البنية وسيطات للدالة otTcpEndpointinitialize(). |
otTcpListener |
هذه البنية تمثّل أداة معالجة TCP. |
otTcpListenerinitializeArgs |
تتضمن هذه البنية وسيطات للدالة otTcpListenerinitialize(). |
تعداد
تعداد مجهول
anonymous enum
يحدد هذا التعداد العلامات التي تم تمريرها إلى otTcpSendByReference
.
otTcpإلغاء الربط
otTcpDisconnectedReason
otTcpInboundConnectionAction
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
تشير بنية otLinkBuffer واحدة إلى مصفوفة من وحدات البايت في الذاكرة من خلال mData وmLength. يُستخدم حقل mNext لإنشاء سلسلة من البنى otLinkBuffer.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
تشير هذه القيمة إلى أن اتصال TCP جاهز الآن للاتصال ثنائي الاتجاه.
بالنسبة إلى حالة بروتوكول TCP Open 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).
التفاصيل | |||||
---|---|---|---|---|---|
المعلَمات |
|
otTcpإلغاء الربط
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&&39;s. يمكن اعتبار التخزين المؤقت للإرسال كمنطقتين. أولاً، تظهر المنطقة "&" في "رحلات الطيران" في الجزء العلوي (ال برنامج الأمامي) من المخزن المؤقت للإرسال. وهي تتوافق مع البيانات التي تم إرسالها إلى المستلِم، ولكن لم تتم الموافقة عليها بعد. ثانيًا، هناك المنطقة ""backlog" والتي تتألف من جميع البيانات في المخزن المؤقت للإرسال وهي ليست في منطقة "in-flight". تتوافق المنطقة &"backlog" مع البيانات التي يتم وضعها في قائمة الانتظار ليتم إرسالها ولكن لم يتم إرسالها بعد.
تم استدعاء رد الاتصال ردًا على نوعين من الأحداث. أولاً، قد تتقلّص منطقة التخزين المؤقت للإرسال والنسخ النصي (مثلاً، عندما يقر المستلِم بالبيانات التي أرسلناها في وقت سابق). ثانيًا، قد تتقلّص منطقة التخزين المؤقت "&&;;backlog" (قد يتم مثلاً إرسال بيانات جديدة). وغالبًا ما يحدث هذان الشرطان في الوقت نفسه، استجابةً لشريحة ACK من نظير الاتصال، ولهذا السبب يتم دمجها في استدعاء واحد.
لا تستخدم حزمة TCP سوى وحدات بايت aInSendBuffer
في ذيل المخزن المؤقت للإرسال. عند انخفاض aInSendBuffer
بمقدار x، فهذا يعني أن x وحدات البايت الإضافية التي كانت موجودة من قبل في المخزن المؤقت للإرسال لم تعد جزءًا من المخزن المؤقت للإرسال ويمكن الآن استردادها (أي تم استبدالها) من خلال التطبيق. لا يمكن استعادة البنية otLinkBuffer نفسها إلا بعد أن تصبح جميع وحدات البايت التي تشير إليها جزءًا من المخزن المؤقت للإرسال.
يفترض رد الاتصال هذا otTcpSendDone()، بالمعنى التالي: يمكن للتطبيقات تحديد وقت استرداد المخزن المؤقت المرتبط من خلال مقارنة aInSendBuffer
بعدد وحدات البايت الموجودة في كل مخزن مؤقت مرتبط. ومع ذلك، نتوقع أن تكون الأداة otTcpSendDone()، التي تنقل مباشرةً إلى otLinkBuffers التي يمكن استردادها، أكثر سهولة في الاستخدام. إذا تم تسجيل معاودة الاتصال وتم تشغيلهما في الحدث نفسه (على سبيل المثال، تم تلقي شريحة ACK نفسها)، سيتم تشغيل استدعاء otTcpSendDone() أولاً، متبوعًا بمعاودة الاتصال هذه.
بالإضافة إلى ذلك، يوفر معاودة الاتصال هذه aBacklog
، وهو ما يشير إلى عدد وحدات البايت للبيانات في المخزن المؤقت للإرسال لم يتم إرسالها بعد. بالنسبة إلى التطبيقات التي تريد إضافة بيانات إلى المخزن المؤقت للإرسال فقط عندما يكون هناك تأكيد بأنه سيتم إرسالها قريبًا، قد يكون من المستحسن إرسال البيانات عندما يكون aBacklog
صغيرًا بشكل مناسب (0 أو قريبًا من 0). على سبيل المثال، قد يستخدم تطبيق aBacklog
ليمكنه التفاعل مع تراكم قائمة الانتظار من خلال إفلات البيانات أو تجميعها لتجنب إنشاء تراكم البيانات.
بعد استدعاء otTcpSendByReference() أو otTcpSendByExtension() باستخدام عدد إيجابي من وحدات البايت، نضمن أن استدعاء otTcpForwardProgress() للإشارة إلى وقت إرسال وحدات البايت التي تمت إضافتها إلى المخزن المؤقت للإرسال. قد يتم استدعاء otTcpForwardProgress() مباشرة بعد إضافة وحدات البايت إلى المخزن المؤقت للإرسال (إذا تم إرسال بعض هذه وحدات البايت على الفور، مما يقلل من التراكمات)، أو ربما في وقت ما في المستقبل (بمجرد الاتصال يُرسل بعض البيانات أو جميعها، مما يقلل من معكوسًا). نقصد بـ "mediamediately," أنّه تمّت جدولة معاودة الاتصال على الفور في تنفيذ مهام
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلَمات |
|
otTcpInboundConnectionAction
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's والذاكرة المخزن المؤقت للاستلام مرتبطة بنقطة نهاية TCP.
التفاصيل | |||||
---|---|---|---|---|---|
المعلَمات |
|
||||
قيم الإرجاع |
|
ربط otTcp
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. وهذا يعني أن هذه الدالة لا تسجِّل سوى المضيف والمنفذ عن بُعد، وأن تأكيد الاتصال بمؤسسة TCP لا يحدث إلا في الطلب الأول من أجل otTcpSendByReference(). ويمكن إيقاف الفتح السريع لبروتوكول TCP صراحةً باستخدام aFlags
، وفي هذه الحالة يتم بدء تأكيد الاتصال بمؤسسة TCP على الفور.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||
قيم الإرجاع |
|
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 )
تحصل على المثيل الذي تم ربطه بـ 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's خاصة بمضيف ومنفذ 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 )
تحصل على المثيل الذي تم ربطه بـ 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";next (التالي) أو حتى الاستدعاء التالي لـ 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 ذلك، ولا يجب تعديلها بواسطة التطبيق إلى أن تتم معاودة الاتصال بهذه الأجسام إلى التطبيق. من المقبول استدعاء هذه الدالة لإضافة ذاكرة تخزين مؤقت مرتبطة أخرى إلى قائمة انتظار الإرسال، حتى إذا لم يتم تنشيط استدعاء الإجراء "&send;" للاستدعاء السابق لهذه الدالة.
يجب ألا يكون aBuffer
سلسلة، وأن يكون حقل mNext فارغًا. إذا تمت إضافة بيانات إضافية بعد هذه المكالمة مباشرةً، يجب استخدام علامة OT_TCP_SEND_MORE_TO_COME كتلميح لتنفيذ بروتوكول TCP.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||
قيم الإرجاع |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
أخبِر نظير الاتصال أن نقطة نهاية TCP هذه لن ترسل المزيد من البيانات.
يجب استخدام هذا الخيار عندما لا يتوفر في التطبيق مزيد من البيانات لإرسالها إلى نظير الاتصال. بالنسبة إلى هذا الاتصال، ستؤدي قراءات المستقبل على نظير الاتصال إلى حالة اقتصار &نقطة نظراً للدفق، وستتعذّر عمليات الكتابة المستقبلية على نقطة نهاية الاتصال هذه.
لا يسري الشرط ""؛ نهاية مصدر البث&، إلا بعد تلقّي بيانات الاتصال التي تم إرسالها سابقًا إلى حزمة TCP لإرسالها.
التفاصيل | |||||
---|---|---|---|---|---|
المعلَمات |
|
||||
قيم الإرجاع |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
يؤدي هذا إلى إيقاف مستمع TCP هذا عن الاستماع للاتصالات الواردة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلَمات |
|
||||
قيم الإرجاع |
|
وحدات ماكرو
OT_TCP_ENDPOINTS_TCB_NUM_PTR
OT_TCP_ENDPOINT_TCB_NUM_PTR 36
OT_TCP_ENDPOINTS_TCB_SIZE_BASE
OT_TCP_ENDPOINT_TCB_SIZE_BASE 368
تم اختيار OT_TCP_ENDPOINTS_TCB_SIZE_BASE وOT_TCP_ENDPOINTS_TCB_NUM_POINTSERS بحيث يكون حقل mTcb لـ otTcpEndpoint له نفس حجم بنية tcpcb في TCPlp.
ويُعدّ هذا إجراءً ضروريًا لأنه يتم التعامل مع حقل mTcb، على الرغم من أنه غير شفاف في تعريفه، على أنه بنية تكلفة النقرة المستهدفة في تنفيذ بروتوكول 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_POINTSERS بحيث يصبح حقل mTcbListener otTcpListener مطابقًا لحجم tcpcb_listen في TCPlp.
ويُعدّ هذا إجراءً ضروريًا لأنه يتم التعامل مع حقل mTcbListen على الرغم من أن التعتيم في إعلانه يتم التعامل معه كبنية tcpcb في تنفيذ بروتوكول TCP.
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2599
حجم المخزن المؤقت الموصى به لاتصالات TCP التي تتجاوز 3 قفزات لاسلكية أو أقل.
على الأنظمة الأساسية التي تكون فيها الذاكرة محدودة بشكل خاص وفي الحالات التي لا يكون فيها معدل نقل البيانات مرتفعًا ضروريًا، قد يكون من الأفضل اختيار حجم ذاكرة تخزين مؤقت أصغر يدويًا.
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4158
حجم المخزن المؤقت الموصى به لاتصالات TCP التي تتجاوز العديد من قفزات الشبكة اللاسلكية.
إذا اجتاز اتصال TCP عددًا كبيرًا جدًا من القفزات (أكثر من 6 أو أكثر)، قد يكون من المستحسن اختيار حجم كبير المخزن المؤقت يدويًا.
المراجع
تنشأ مواضيع واجهة برمجة تطبيقات OpenThread المرجعية من رمز المصدر المتاح على GitHub. للحصول على مزيد من المعلومات أو للمساهمة في الوثائق، يُرجى الرجوع إلى الموارد.