TCP
इस मॉड्यूल में ऐसे फ़ंक्शन शामिल हैं जो टीसीपी कम्यूनिकेशन को कंट्रोल करते हैं.
खास जानकारी
गिनती |
|
---|---|
anonymous enum
|
enum otTcpConnect() को भेजे गए फ़्लैग के बारे में बताता है. |
anonymous enum
|
enumotTcpSendByReference को भेजे गए फ़्लैग के बारे में बताता है. |
otTcpDisconnectedReason
|
enum |
otTcpIncomingConnectionAction{
|
enum यह फ़ंक्शन, कनेक्शन के लिए होने वाली कार्रवाइयों के बारे में बताता है. |
टाइपडीफ़ |
|
---|---|
otLinkedBuffer
|
typedefstruct otLinkedBuffer
टीसीपी के साथ इस्तेमाल करने के लिए, लिंक किया गया बफ़र स्ट्रक्चर. |
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
|
typedefvoid(*
यह कॉलबैक बताता है कि टीसीपी कनेक्शन अब टू-वे कम्यूनिकेशन के लिए तैयार है. |
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
|
typedef यह कॉलबैक बताता है कि इस टीसीपी लिसनर से मैच करने वाला इनकमिंग कनेक्शन आ गया है. |
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
|
typedefvoid(*
यह कॉलबैक बताता है कि कनेक्शन टूट गया था और अब इसका इस्तेमाल नहीं किया जाना चाहिए या कोई कनेक्शन टाइम-वेक स्थिति में चला गया है. |
otTcpDisconnectedReason
|
typedefenum otTcpDisconnectedReason
|
otTcpEndpoint
|
typedefstruct otTcpEndpoint
|
otTcpEndpointInitializeArgs
|
typedefstruct otTcpEndpointInitializeArgs
इसमें otTcpEndpointInitialize() फ़ंक्शन के लिए आर्ग्युमेंट शामिल होते हैं. |
otTcpEstablished)(otTcpEndpoint *aEndpoint)
|
typedefvoid(*
यह कॉलबैक, ऐप्लिकेशन को बताता है कि टीसीपी 3-वे हैंडशेक पूरा हो गया है और अब कनेक्शन बन गया है. |
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)
|
इस टीसीपी एंडपॉइंट से जुड़े टीसीपी कनेक्शन को ज़बरदस्ती खत्म करता है.
|
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
|
टीसीपी एंडपॉइंट को आईपी पते और पोर्ट से बाइंड करता है.
|
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
|
यह टीसीपी स्टैक को सूचना देता है कि ऐप्लिकेशन ने
aNumBytes बाइट डेटा को रिसीव बफ़र की शुरुआत में प्रोसेस कर लिया है. साथ ही, यह भी बताता है कि टीसीपी स्टैक को इन बाइट को रिसीव बफ़र में बनाए रखने की ज़रूरत नहीं है. |
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
|
इस कनेक्शन के लिए रिमोट होस्ट और पोर्ट को रिकॉर्ड करता है.
|
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
|
यह टीसीपी एंडपॉइंट को शुरू नहीं करता है.
|
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
|
void *
शुरू होने पर,
aEndpoint से जुड़े कॉन्टेक्स्ट पॉइंटर को हासिल करता है. |
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
|
शुरू होने पर,
aEndpoint से जुड़े otइंस्टेंस को हासिल करता है. |
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
|
टीसीपी एंडपॉइंट को शुरू करता है.
|
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
टीसीपी एंडपॉइंट के लोकल होस्ट और पोर्ट के लिए पॉइंटर हासिल करता है.
|
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
|
const otSockAddr *
टीसीपी एंडपॉइंट के पीयर के होस्ट और पोर्ट के लिए पॉइंटर हासिल करता है.
|
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
|
इसकी वजह से, आने वाले ऐसे टीसीपी कनेक्शन होते हैं जो दिए गए आईपी पते और पोर्ट से मैच करते हैं. इससे, टीसीपी लिसनर के कॉलबैक ट्रिगर होते हैं.
|
otTcpListenerDeinitialize(otTcpListener *aListener)
|
यह टीसीपी लिसनर को बंद कर देता है.
|
otTcpListenerGetContext(otTcpListener *aListener)
|
void *
शुरू होने पर,
aListener से जुड़े कॉन्टेक्स्ट पॉइंटर को हासिल करता है. |
otTcpListenerGetInstance(otTcpListener *aListener)
|
शुरू होने पर,
aListener से जुड़े otइंस्टेंस को हासिल करता है. |
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
|
टीसीपी लिसनर को शुरू करता है.
|
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)
|
इससे, कनेक्शन पीयर को सूचना मिलती है कि यह टीसीपी एंडपॉइंट ज़्यादा डेटा नहीं भेजेगा.
|
otTcpStopListening(otTcpListener *aListener)
|
इसकी वजह से, यह टीसीपी लिसनर इनकमिंग कनेक्शन को सुनना बंद कर देता है.
|
संरचना |
|
---|---|
otLinkedBuffer |
टीसीपी के साथ इस्तेमाल करने के लिए, लिंक किया गया बफ़र स्ट्रक्चर. |
otTcpEndpoint |
टीसीपी एंडपॉइंट को दिखाता है. |
otTcpEndpointInitializeArgs |
इसमें otTcpEndpointInitialize() फ़ंक्शन के लिए आर्ग्युमेंट शामिल होते हैं. |
otTcpListener |
यह टीसीपी लिसनर के बारे में बताता है. |
otTcpListenerInitializeArgs |
इसमें otTcpListenerInitialize() फ़ंक्शन में आर्ग्युमेंट शामिल होते हैं. |
गिनती
अनाम Enum
anonymous enum
otTcpSendByReference
को भेजे गए फ़्लैग के बारे में बताता है.
otTcpDisconnectedReason
otTcpDisconnectedReason
otTcpIncomingConnectionAction
otTcpIncomingConnectionAction
यह फ़ंक्शन, कनेक्शन के लिए होने वाली कार्रवाइयों के बारे में बताता है.
इसका इस्तेमाल otTcpAcceptReady() कॉलबैक में किया जाता है.
प्रॉपर्टी | |
---|---|
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT
|
इनकमिंग कनेक्शन स्वीकार करें. |
OT_TCP_INCOMING_CONNECTION_ACTION_DEFER
|
आने वाले कनेक्शन को कुछ देर के लिए रोकें. |
OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
|
इनकमिंग कनेक्शन को अस्वीकार करें. |
टाइपडीफ़
otLinkedBuffer
struct otLinkedBuffer otLinkedBuffer
टीसीपी के साथ इस्तेमाल करने के लिए, लिंक किया गया बफ़र स्ट्रक्चर.
एक otLinkedBuffer संरचना, mData और mLength के ज़रिए मेमोरी में बाइट की कैटगरी का रेफ़रंस देती है. mNext फ़ील्ड का इस्तेमाल otLinkedBuffer स्ट्रक्चर की एक चेन बनाने के लिए किया जाता है.
otTcpAcceptDone
void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)
यह कॉलबैक बताता है कि टीसीपी कनेक्शन अब टू-वे कम्यूनिकेशन के लिए तैयार है.
टीसीपी फ़ास्ट ओपन के मामले में, ऐसा टीसीपी कनेक्शन हैंडशेक के पूरा होने से पहले भी हो सकता है. कनेक्शन को स्वीकार करने वाले टीसीपी लिसनर और इसके लिए इस्तेमाल किए जाने वाले टीसीपी लिसनर, दोनों के लिए, इस ऐप्लिकेशन में कॉन्टेक्स्ट पॉइंटर दिए जाते हैं. दिया गया कॉन्टेक्स्ट वह होता है जो टीसीपी लिसनर से जुड़ा हो.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
otTcpAcceptReady
otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)
यह कॉलबैक बताता है कि इस टीसीपी लिसनर से मैच करने वाला इनकमिंग कनेक्शन आ गया है.
आम तौर पर, ऐप्लिकेशन को इनकमिंग कनेक्शन स्वीकार करना होता है. ऐसा करने के लिए, aAcceptInto
में एक पॉइंटर की मदद से otTcpEndpoint पर जानकारी अपने-आप भर जाती है, जिसमें आने वाले कनेक्शन को स्वीकार करना होता है. इस otTcpEndpoint को otTcpEndpointInitialize() की मदद से पहले ही शुरू किया जा चुका है. इसके बाद, ऐप्लिकेशन OT_TCP_INCOMING_CONNECTION_ACTION_CONTROL का इस्तेमाल करता है.
इसके अलावा, ऐप्लिकेशन आने वाले कनेक्शन को स्वीकार करने से मना कर सकता है. ऐसा करने के लिए ऐप्लिकेशन के पास दो तरीके हैं. सबसे पहले, अगर ऐप्लिकेशन OT_TCP_INCOMING_CONNECTION_ACTION_DEFER देता है, तो OpenThread बिना किसी रुकावट के, कनेक्शन की पुष्टि करने के अनुरोध को अनदेखा कर देता है. ऐसा हो सकता है कि कनेक्शन बनाने वाला ऐप्लिकेशन, अनुरोध को फिर से शेयर करे. ऐसा होने पर, कॉलबैक को फिर से कॉल किया जाएगा. अगर कनेक्शन स्वीकार करने के लिए संसाधन मौजूद नहीं हैं, तो यह तरीका अहम है. हालांकि, जब कनेक्शन पीयर, कनेक्शन बनाने की कोशिश फिर से करता है, तब वे उपलब्ध हो सकते हैं. दूसरा, अगर ऐप्लिकेशन OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE देता है, तो OpenThread उस होस्ट को "कनेक्शन अस्वीकार किया गया" मैसेज भेजता है जिसने कनेक्ट करने की कोशिश की थी. अगर ऐप्लिकेशन, इनकमिंग कनेक्शन का अनुरोध अस्वीकार कर देता है, तो aAcceptInto
में जानकारी भरने की ज़रूरत नहीं है.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
लौटाए गए सामान |
इनकमिंग कनेक्शन को मैनेज करने के तरीके की जानकारी.
|
otTcpDisconnected
void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)
यह कॉलबैक बताता है कि कनेक्शन टूट गया था और अब इसका इस्तेमाल नहीं किया जाना चाहिए या कोई कनेक्शन टाइम-वेक स्थिति में चला गया है.
ऐसा तब हो सकता है, जब कनेक्शन बनाने की कोशिश (otTcpConnect() को कॉल करके की गई हो) या इसके बाद किसी भी समय (उदाहरण के लिए, अगर कनेक्शन का टाइम आउट हो जाता है या कनेक्शन पीयर से कोई आरएसटी सेगमेंट मिलता है) फ़ेल हो जाता है. इस कॉलबैक के फ़ायर होने के बाद, कनेक्शन के लिए दिए गए सभी रिसॉर्स (यानी कि कोई भी otLinkedBuffers
और मेमोरी, जिसका रेफ़रंस दिया गया है, न कि टीसीपी एंडपॉइंट या रिसीव बफ़र के लिए स्पेस) को फिर से पाया जा सकता है. टाइम-वेक स्थिति में प्रवेश करने वाले कनेक्शन के मामले में, इस कॉलबैक को दो बार कॉल किया जाता है, जिसमें पहली बार TIME-AGE स्थिति में जाने पर (OT_TCP_DISCONNECTED_REASON_TIME_ फ़ंक्शन से, और दोबारा, TIME-रु की स्थिति की समय-सीमा समाप्त होने पर (OT_TCP_DISCONNECTED_REASON_NORMAL के साथ) कॉल किया जाता है.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
otTcpDisconnectedReason
enum otTcpDisconnectedReason otTcpDisconnectedReason
otTcpEndpoint
struct otTcpEndpoint otTcpEndpoint
otTcpEndpointInitializeArgs
struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs
इसमें otTcpEndpointInitialize() फ़ंक्शन के लिए आर्ग्युमेंट शामिल होते हैं.
otTcpEstablished
void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)
यह कॉलबैक, ऐप्लिकेशन को बताता है कि टीसीपी 3-वे हैंडशेक पूरा हो गया है और अब कनेक्शन बन गया है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
otTcpForwardProgress
void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)
यह कॉलबैक ऐप्लिकेशन को सूचना देता है कि 'भेजे गए बफ़र' से डेटा पाने वाले को डेटा ट्रांसफ़र होने की प्रोसेस जारी है या नहीं.
सही टीसीपी कार्रवाई के लिए यह कॉलबैक ज़रूरी नहीं है. ज़्यादातर ऐप्लिकेशन, लिंक किए गए बफ़र का इस्तेमाल करने के बाद, उन पर otTcpSendDone() कॉलबैक पर भरोसा करते हैं. इससे, लिंक किए गए बफ़र का इस्तेमाल हो जाने के बाद, उन पर दावा किया जाता है. इस कॉलबैक का मकसद बेहतर ऐप्लिकेशन के साथ काम करना है, जिन्हें इस बारे में ज़्यादा बेहतर जानकारी से फ़ायदा मिलता है कि कैसे कनेक्शन पीयर को डेटा ट्रांसफ़र करने में तेज़ी से आगे बढ़ रहा है.
इस कॉलबैक की कार्रवाई, टीसीपी के'भेजें' बफ़र से काफ़ी हद तक जुड़ी होती है. 'भेजें' बफ़र को दो क्षेत्रों के तौर पर समझा जा सकता है. सबसे पहले, भेजें बफ़र के शीर्ष (आगे) में "इन-फ़्लाइट" क्षेत्र होता है. यह उसी डेटा से जुड़ा होता है जिसे पाने वाले को भेजा गया है, लेकिन उसे अभी तक स्वीकार नहीं किया गया है. दूसरा, "बैकलॉग" क्षेत्र होता है, जिसमें भेजें बफ़र का वह पूरा डेटा शामिल होता है जो "इन-फ़्लाइट" क्षेत्र में नहीं है. "बैकलॉग" इलाका, उस डेटा से जुड़ा होता है जिसे भेजे जाने के लिए सूची में शामिल किया जाता है, लेकिन अभी तक भेजा नहीं गया है.
कॉलबैक को दो तरह के इवेंट के जवाब में शुरू किया जाता है. सबसे पहले, भेजें बफ़र का "इन-फ़्लाइट" क्षेत्र सिकुड़ सकता है (जैसे, जब ईमेल पाने वाला यह स्वीकार करता है कि हमने पहले भेजे गए डेटा की पुष्टि की थी). दूसरा, भेजें बफ़र का "बैकलॉग" क्षेत्र छोटा हो सकता है (उदाहरण के लिए, नया डेटा भेजा गया). कनेक्शन पीयर से ACK सेगमेंट के जवाब में, ये दो शर्तें अक्सर एक ही समय पर होती हैं. इसलिए, उन्हें एक ही कॉलबैक में जोड़ा जाता है.
टीसीपी स्टैक, भेजे गए बफ़र के आखिरी हिस्से में सिर्फ़ aInSendBuffer
बाइट का इस्तेमाल करता है.जब aInSendBuffer
x तक घटता है, तो इसका मतलब है कि x अतिरिक्त बाइट जो पहले भेजें बफ़र के हेड में थीं, अब वे भेजें बफ़र का हिस्सा नहीं हैं. अब ऐप्लिकेशन से उन पर फिर से दावा किया जा सकता है (यानी ओवरराइट). ध्यान दें कि otLinkedBuffer संरचना पर सिर्फ़ एक बार फिर से दावा किया जा सकता है. ऐसा सिर्फ़ एक बार किया जा सकता है. ऐसा तब किया जाता है, जब इस बाइट के बारे में बताया गया हो और वे अब भेजने के बफ़र का हिस्सा न हों.
यह कॉलबैक otTcpSendDone() को नीचे बताए गए तरीके से शामिल करता है: ऐप्लिकेशन यह तय कर सकते हैं कि लिंक किए गए बफ़र पर कब दावा किया जा सकता है. इसके लिए, aInSendBuffer
की तुलना लिंक किए गए हर बफ़र में मौजूद बाइट की संख्या से की जाती है. हालांकि, हम otTcpSendDone() फ़ंक्शन का इस्तेमाल करते हैं. इससे यह पता चलता है कि कौनसे otLinkedBuffers का फिर से दावा किया जा सकता है और यह इस्तेमाल करने में बहुत आसान है. अगर दोनों कॉलबैक रजिस्टर किए गए हैं और एक ही इवेंट से ट्रिगर होते हैं (जैसे कि एक ही ACK सेगमेंट मिला), तो पहले otTcpSendDone() कॉलबैक ट्रिगर होगा. इसके बाद, यह कॉलबैक ट्रिगर होगा.
इसके अलावा, इस कॉलबैक में aBacklog
की सुविधा होती है. इससे पता चलता है कि भेजें बफ़र में कितने बाइट डेटा फ़िलहाल फ़्लाइट में नहीं है. उन ऐप्लिकेशन को डेटा भेजने के लिए बफ़र में सिर्फ़ तब शामिल करना होता है, जब इस बात का भरोसा हो कि उसे जल्द ही भेज दिया जाएगा, इसलिए ज़रूरी हो सकता है कि डेटा सिर्फ़ तब भेजा जाए, जब aBacklog
ज़रूरत के मुताबिक छोटा हो (0 या 0 के करीब). उदाहरण के लिए, कोई ऐप्लिकेशन aBacklog
का इस्तेमाल कर सकता है, ताकि यह डेटा का बैकलॉग बनाने से बचने के लिए, डेटा इकट्ठा करके या उसे ग्रुप में बांटकर सूची में बदलाव कर सके.
otTcpSendByReference() या otTcpSendByExtension() या बाइट की पॉज़िटिव संख्या के साथ otTcpSendByExtension() को कॉल करने के बाद, otTcpForwardProgress() कॉलबैक को कॉल करने की गारंटी होती है. इससे पता चलता है कि भेजे जाने वाले बफ़र में जोड़ी गई बाइट कब भेजी गई थीं. otTcpForwardProgress() को, भेजे गए बफ़र में बाइट जोड़ने के तुरंत बाद की जा सकती है (अगर उनमें से कुछ बाइट तुरंत भेज दी जाती हैं, जिससे बैकलॉग कम हो जाता है) या बाद में कभी (जब कनेक्शन पूरा या पूरा डेटा भेज देता है, तो बैकलॉग कम हो जाता है). "तुरंत" से, हमारा मतलब है कि कॉलबैक को किसी टास्कलेट में तुरंत एक्ज़ीक्यूशन के लिए शेड्यूल किया जाता है. रीएंट्रेंसी से जुड़ी जटिलता से बचने के लिए, otTcpForwardProgress()
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
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
, otTcpSendByReference() के ज़रिए टीसीपी में पास की गई वैल्यू से मेल खाएगा और इनमें otTcpSendByExtension() की मदद से लागू किए गए एक्सटेंशन भी शामिल होंगे.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
फ़ंक्शन
otTcpAbort
otError otTcpAbort( otTcpEndpoint *aEndpoint )
इस टीसीपी एंडपॉइंट से जुड़े टीसीपी कनेक्शन को ज़बरदस्ती खत्म करता है.
इससे टीसीपी एंडपॉइंट किसी दूसरे कनेक्शन के लिए तुरंत इस्तेमाल नहीं किया जा सकता. साथ ही, यह भेजने और पाने वाले बफ़र को खाली कर देता है. साथ ही, otTcpSendByReference() और otTcpSendByExtension() में दिए गए डेटा का मालिकाना हक वापस ऐप्लिकेशन को ट्रांसफ़र कर देता है. टीसीपी एंडपॉइंट के कॉलबैक और रिसीव बफ़र के लिए मेमोरी, टीसीपी एंडपॉइंट से जुड़ी रहती है.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
otTcpBind
otError otTcpBind( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName )
टीसीपी एंडपॉइंट को आईपी पते और पोर्ट से बाइंड करता है.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
otTcpCommitReceive
otError otTcpCommitReceive( otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags )
यह टीसीपी स्टैक को सूचना देता है कि ऐप्लिकेशन ने aNumBytes
बाइट डेटा को रिसीव बफ़र की शुरुआत में प्रोसेस कर लिया है. साथ ही, यह भी बताता है कि टीसीपी स्टैक को इन बाइट को रिसीव बफ़र में बनाए रखने की ज़रूरत नहीं है.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
रिटर्न वैल्यू |
|
otTcpConnect
otError otTcpConnect( otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags )
इस कनेक्शन के लिए रिमोट होस्ट और पोर्ट को रिकॉर्ड करता है.
टीसीपी फ़ास्ट ओपन को aFlags
का इस्तेमाल करके चालू या बंद किया जाना चाहिए. यह सुविधा बंद होने पर, टीसीपी कनेक्शन इंस्टॉलेशन हैंडशेक तुरंत शुरू हो जाता है. अगर इसे चालू किया जाता है, तो यह फ़ंक्शन सिर्फ़ रिमोट होस्ट और पोर्ट को रिकॉर्ड करता है. साथ ही, टीसीपी कनेक्शन इंस्टॉलेशन हैंडशेक, otTcpSendByReference()
को किए गए पहले कॉल पर ही होता है.
अगर टीसीपी फ़ास्ट ओपन की सुविधा बंद है, तो कॉलर को otTcpEstablished
कॉलबैक का इंतज़ार करना होगा, जो यह बताता है कि टीसीपी कनेक्शन स्थापित होने से पहले हैंडशेक किया जा चुका है.इसके बाद ही, वह डेटा भेजना शुरू कर पाएगा. उदाहरण के लिए, otTcpSendByReference()
पर कॉल करके.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
रिटर्न वैल्यू |
|
otTcpEndpointDeinitialize
otError otTcpEndpointDeinitialize( otTcpEndpoint *aEndpoint )
यह टीसीपी एंडपॉइंट को शुरू नहीं करता है.
इसका मतलब है कि OpenThread अब इस टीसीपी एंडपॉइंट को ट्रैक नहीं करता है. साथ ही, यह उन सभी संसाधनों को हटा देता है जो इस टीसीपी एंडपॉइंट के लिए अंदरूनी तौर पर असाइन किए गए हैं. ऐप्लिकेशन, टीसीपी एंडपॉइंट का बैक अप लेने वाली मेमोरी को फिर से इस्तेमाल कर सकता है.
अगर यह किसी लाइव टीसीपी कनेक्शन से जुड़ा होता है, तो कनेक्शन बिना किसी वजह के खत्म कर दिया जाता है (जैसे कि otTcpAbort()). इस टीसीपी एंडपॉइंट के लिए ऐप्लिकेशन से मिले सभी संसाधन (भेजें बफ़र के लिए लिंक किए गए बफ़र, रिसीव बफ़र के लिए मेमोरी, और aEndpoint
स्ट्रक्चर वगैरह) ऐप्लिकेशन में तुरंत वापस आ जाते हैं.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
otTcpEndpointGetContext
void * otTcpEndpointGetContext( otTcpEndpoint *aEndpoint )
शुरू होने पर, aEndpoint
से जुड़े कॉन्टेक्स्ट पॉइंटर को हासिल करता है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए गए सामान |
aEndpoint से जुड़ा कॉन्टेक्स्ट पॉइंटर. |
otTcpEndpointGetInstance
otInstance * otTcpEndpointGetInstance( otTcpEndpoint *aEndpoint )
शुरू होने पर, aEndpoint
से जुड़े otइंस्टेंस को हासिल करता है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए गए सामान |
aEndpoint से जुड़ा ओटइंस्टेंस पॉइंटर. |
otTcpEndpointInitialize
otError otTcpEndpointInitialize( otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs )
टीसीपी एंडपॉइंट को शुरू करता है.
इस फ़ंक्शन को कॉल करने से OpenThread, टीसीपी एंडपॉइंट को ट्रैक करता है और aEndpoint
में टीसीपी डेटा को स्टोर और हासिल करता है. ऐप्लिकेशन को aEndpoint
में फ़ील्ड को सीधे ऐक्सेस करने या उसमें बदलाव करने से बचना चाहिए. अगर ऐप्लिकेशन को aEndpoint
के लिए बैक अप की गई मेमोरी को फिर से पाने की ज़रूरत है, तो इसे otTcpEndpointDeinitialize() को कॉल करना चाहिए.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
रिटर्न वैल्यू |
|
otTcpGetLocalAddress
const otSockAddr * otTcpGetLocalAddress( const otTcpEndpoint *aEndpoint )
टीसीपी एंडपॉइंट के लोकल होस्ट और पोर्ट के लिए पॉइंटर हासिल करता है.
अगर यह सॉकेट कनेक्टेड स्थिति में न हो और पिछली बार डिसकनेक्ट होने के बाद बाइंड न किया गया हो, तो होस्ट और पोर्ट की सामग्री पुरानी हो सकती है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए गए सामान |
aEndpoint का लोकल होस्ट और पोर्ट. |
otTcpGetPeerAddress
const otSockAddr * otTcpGetPeerAddress( const otTcpEndpoint *aEndpoint )
टीसीपी एंडपॉइंट के पीयर के होस्ट और पोर्ट के लिए पॉइंटर हासिल करता है.
अगर यह सॉकेट कनेक्ट की गई स्थिति में नहीं है, तो होस्ट और पोर्ट की सामग्री पुरानी हो सकती है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए गए सामान |
aEndpoint के कनेक्शन पीयर का होस्ट और पोर्ट. |
otTcpListen
otError otTcpListen( otTcpListener *aListener, const otSockAddr *aSockName )
इसकी वजह से, आने वाले ऐसे टीसीपी कनेक्शन होते हैं जो दिए गए आईपी पते और पोर्ट से मैच करते हैं. इससे, टीसीपी लिसनर के कॉलबैक ट्रिगर होते हैं.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
otTcpListenerDeinitialize
otError otTcpListenerDeinitialize( otTcpListener *aListener )
यह टीसीपी लिसनर को बंद कर देता है.
इसका मतलब है कि OpenThread अब इस टीसीपी लिसनर को ट्रैक नहीं करता है. साथ ही, यह उन सभी संसाधनों को हटा देता है जो इसे टीसीपी लिसनर के लिए अंदरूनी तौर पर असाइन करते हैं. ऐप्लिकेशन, टीसीपी लिसनर के साथ काम करने वाली मेमोरी का फिर से इस्तेमाल कर सकता है.
अगर टीसीपी लिसनर फ़िलहाल सुन रहा है, तो यह सुनना बंद कर देगा.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
otTcpListenerGetContext
void * otTcpListenerGetContext( otTcpListener *aListener )
शुरू होने पर, aListener
से जुड़े कॉन्टेक्स्ट पॉइंटर को हासिल करता है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए गए सामान |
aListener से जुड़ा कॉन्टेक्स्ट पॉइंटर. |
otTcpListenerGetInstance
otInstance * otTcpListenerGetInstance( otTcpListener *aListener )
शुरू होने पर, aListener
से जुड़े otइंस्टेंस को हासिल करता है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए गए सामान |
aListener से जुड़ा ओटइंस्टेंस पॉइंटर. |
otTcpListenerInitialize
otError otTcpListenerInitialize( otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs )
टीसीपी लिसनर को शुरू करता है.
इस फ़ंक्शन को कॉल करने से 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
ने भेजे गए बफ़र में रेफ़र किया था.
इस फ़ंक्शन को कॉल करने के बाद, लिंक किए गए बफ़र और उसमें इस्तेमाल किए गए डेटा का मालिकाना हक टीसीपी स्टैक के पास होता है. ऐप्लिकेशन को इनमें तब तक बदलाव नहीं करना चाहिए, जब तक "भेजा गया" कॉलबैक ऐप्लिकेशन को उन ऑब्जेक्ट का मालिकाना हक न दे दे. भेजे जाने वाली सूची में लिंक किया गया कोई दूसरा बफ़र जोड़ने के लिए, इस फ़ंक्शन को कॉल किया जा सकता है. भले ही, इस फ़ंक्शन के लिए पहले शुरू की गई कार्रवाई के लिए "भेजा गया" कॉलबैक अभी तक ट्रिगर न हुआ हो.
ध्यान दें कि aBuffer
को चेन नहीं होना चाहिए. इसका mNext फ़ील्ड NULL होना चाहिए. अगर इस कॉल के तुरंत बाद अतिरिक्त डेटा जोड़ा जाता है, तो टीसीपी को लागू करने के संकेत के तौर पर OT_TCP_SEND_MORE_TO_COME फ़्लैग का इस्तेमाल किया जाना चाहिए.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
रिटर्न वैल्यू |
|
otTcpSendEndOfStream
otError otTcpSendEndOfStream( otTcpEndpoint *aEndpoint )
इससे, कनेक्शन पीयर को सूचना मिलती है कि यह टीसीपी एंडपॉइंट ज़्यादा डेटा नहीं भेजेगा.
इसका इस्तेमाल तब किया जाना चाहिए, जब ऐप्लिकेशन के पास कनेक्शन पीयर को भेजने के लिए और डेटा न हो. इस कनेक्शन के लिए, कनेक्शन पीयर पर आने वाले समय के डेटा को "स्ट्रीम बंद करें" शर्त के तौर पर माना जाएगा. साथ ही, इस कनेक्शन एंडपॉइंट पर आने वाले समय में इससे जुड़े डेटा को एक्सपोर्ट नहीं किया जा सकेगा.
"स्ट्रीम का समय खत्म होने" की शर्त सिर्फ़ तब लागू होती है, जब बाहर भेजने के लिए टीसीपी स्टैक को पहले दिया गया कोई डेटा, कनेक्शन पीयर को मिल जाए.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
otTcpStopListening
otError otTcpStopListening( otTcpListener *aListener )
इसकी वजह से, यह टीसीपी लिसनर इनकमिंग कनेक्शन को सुनना बंद कर देता है.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
मैक्रो
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 को इस तरह चुना गया है कि otTcpEndpoint के mTcb फ़ील्ड का साइज़, टीसीपीएलपी में स्ट्रक्चर tcpcb के बराबर है.
ऐसा करना इसलिए ज़रूरी है, क्योंकि टीसीपी लागू करने में 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 को इस तरह चुना जाता है कि otTcpListener के mTcbListener फ़ील्ड का साइज़ वही है जिसका साइज़, टीसीपीएलp में संरचना tcpcb_listen का है.
ऐसा इसलिए ज़रूरी है, क्योंकि टीसीपी लागू करने में mTcbलिस फ़ील्ड को ओपेक माना जाता है, लेकिन टीसीपी लागू करने में इसे स्ट्रक्चर tcpcb के तौर पर माना जाता है.
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598
तीन वायरलेस हॉप या उससे कम वायरलेस हॉप करने वाले टीसीपी कनेक्शन के लिए, बफ़र साइज़ का सुझाव दिया जाता है.
उन प्लैटफ़ॉर्म पर जहां मेमोरी खास तौर पर सीमित होती है और ज़्यादा बैंडविड्थ की ज़रूरत न होने पर, मैन्युअल रूप से छोटा बफ़र साइज़ चुनना बेहतर होता है.
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS
OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157
ऐसे टीसीपी कनेक्शन के लिए सुझाया गया बफ़र साइज़ जो कई वायरलेस हॉप को पार करता है.
अगर टीसीपी कनेक्शन बहुत ज़्यादा बार हॉप (छह से ज़्यादा) पार करता है, तो मैन्युअल तरीके से बड़ा बफ़र साइज़ चुनने की सलाह दी जाती है.
संसाधन
OpenThread API के रेफ़रंस के विषय, सोर्स कोड से मिलते हैं. यह सोर्स GitHub पर उपलब्ध है. ज़्यादा जानकारी या हमारे दस्तावेज़ में योगदान देने के लिए, संसाधन देखें.