tcp - How do I handle partial write completions from overlapped I/O using I/O Completion Ports -


Windows I / O समाप्ति बंदरगाहों पर, मैं यह करता हूं:

  शून्य फ़ंक्शन ( 

) {WSASend ("1111"); // ए WSASend ("2222"); // बी WSASend ("3333"); // सी}

अगर मुझे "लिखना पूर्ण" मिला है जो WSASend (ए) के 3 बाइट्स को बताता है, तो क्या यह संभव है कि उसके बाद मुझे "लिखना पूर्ण "है जो मुझे बताता है कि कुछ या सभी बी एंड amp; सी भेजा गया था, या जब तक मैं ए एस के बाकी डेटा के साथ कोई WSASend () कॉल जारी नहीं कर सकता तब तक टीसीपी उनको पकड़ लेगा? या क्या टीसीपी स्वतः इसे पूरा करेगा?

मैं 10 से अधिक के लिए आईओसीपी के साथ क्लाइंट और सर्वर सिस्टम विकसित कर रहा हूं साल अब और मैंने सामान्य उपयोग में आंशिक लिखित पूर्णता कभी नहीं देखी है। आप उन्हें प्राप्त कर सकते हैं, लेकिन यदि आप करते हैं तो संभावना है कि आपके सर्वर को वैसे भी रोक दिया गया है; आपको शायद ENOBUFS की एक त्रुटि के साथ एक लिखित पूर्णता मिल जाएगी, जिसका अर्थ है कि आपने गैर-पृष्ठांकित पूल समाप्त कर दिया है या लॉक किए गए पृष्ठों की सीमा पार कर ली है।

IMHO आपको अपने संसाधनों का प्रबंधन करना चाहिए इन ऑपरेटिंग सिस्टम की सीमाएं दबाएं।

यदि कोई लेखन पूर्णता आपको बाइट्स की संख्या से कम देता है, जो आपको लगता है कि आपको लिखा जाना चाहिए तो वहां वास्तव में बहुत कुछ नहीं है, अगर आप लंबित लिखते हैं तो आप ठीक कर सकते हैं आपके प्रश्न के उदाहरण में अगर कोई असफल हो गया तो आप केवल वास्तव में बंद कर सकते हैं क्योंकि कनेक्शन बी और सी सफल हो सकते हैं। व्यवहार में आपको इसके बारे में अधिक चिंता करने की ज़रूरत नहीं है।

यदि आप जानते हैं कि आपके पास उस कनेक्शन पर लंबित कोई और लिखित जानकारी नहीं है, तो आप बाद के डेटा को लिखने के लिए एक और लिखने का मुद्दा उठा सकते हैं। / पी> <पी> और टीसीपी इस पर बिल्कुल नहीं आती है।


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -