मैं हाल ही में अपने आवेदन के साथ एक समस्या ध्यान दिया है और मुझे लगता है कि यह सच है कि मैं boost::asio
ठीक से और डॉन 'का उपयोग नहीं करते की वजह से है टी समझ में नहीं आता कि एक टीसीपी संकल्पक क्या करता है।अंतर
मूल रूप से, मैं कनेक्ट करने के लिए एंडपॉइंट प्राप्त करने के लिए boost::asio::ip::tcp::resolver
का उपयोग करता हूं।
क्या मैं हाल ही में पता चला कि यह (विशेष रूप से जब मैं स्थानीय होस्ट से कनेक्ट) एक से अधिक endpoint के साथ आ सकते हैं।
फिलहाल मैं सभी अंत बिंदु पर async_connect
का अनुरोध करता हूं। मैं 100% निश्चित नहीं हूं लेकिन मुझे लगता है कि यह बुरा है। मुझे एक-एक करके एक async_connect अनुरोध करने के लिए जाना चाहिए, उत्तर के लिए प्रतीक्षा करें और अगर केवल विफल होने पर ही अगले पर प्रयास करें।
तो मूल रूप से जानते हुए भी मैं दो विकल्प हैं कि अगर मैं उन अंतिम बिंदुओं पर async_connect
उपयोग करना चाहते हैं:
मेरी कोड refactor ताकि मेरे
async_connect
संभाल विफलता ठीक से और विफलता पर अन्य उपलब्ध कनेक्ट करने का प्रयास अंत बिंदु। मुझे तब एंडपॉइंट इटरेटर पास करना होगा।समाधानकर्ता ड्रॉप और एक अंत बिंदु का उपयोग मैं अपने आप को इस तरह का निर्माण:
boost::asio::ip::tcp::endpoint("localhost", 20015)
मैं एक तरह से एक लग रहा है कि मैं पहली बार समाधान का उपयोग करना चाहिए और रिसोल्वर स्वयं की तुलना में अधिक कुछ ला रहा है कि है निर्मित एंडपॉइंट।
लेकिन रिज़ॉल्यूवर क्या लाता है, और आत्म निर्मित अंत बिंदु कैसे स्वयं को हल करता है?
उत्तर के लिए धन्यवाद, यह बहुत उपयोगी है। मुझे फिर भी पता चला कि एसिंक संकल्प का उपयोग करना अनिश्चित था (मेरा मंच खिड़की है और मुझे अक्सर 'WSA_OPERATION_ABORTED' त्रुटि' 995' मिलती है)। इसलिए मैंने समकालिक समाधान के साथ एक मध्यवर्ती समाधान का चयन किया और प्रत्येक अंत बिंदु पर एक पुनरावर्तक एसिंक्रोनस कनेक्ट किया, और हाँ मेरे कोड को दोबारा सुधारना आसान था। – Arthur