मैं एक ऐप विकसित कर रहा हूं जिसमें एक टीसीपी सर्वर और कई यूडीपी सर्वर/श्रोताओं हैं। प्रत्येक सर्वर एक अलग थ्रेड है, जो स्थापित टीसीपी कनेक्शन के लिए वर्कर थ्रेड के समान है। मैं प्रत्येक धागे में WSAStartup() को बुला रहा हूं।कई धागे से WSAStartup() को कॉल कर सकते हैं डेडलॉक का कारण बनता है?
कभी-कभी, WSAStartup() को कॉल करना (यह मेरे लिए एक डेडलॉक जैसा दिखता है)। यहां स्टैक ट्रेस है:
[email protected]()
[email protected]() + 0xc bytes
[email protected]() + 0x8c bytes
[email protected]() + 0x46 bytes
[email protected]() + 0x17d bytes
[email protected]() + 0x18 bytes
[email protected]() + 0x3e bytes
vld.dll!03203723()
[Frames below may be incorrect and/or missing, no symbols loaded for vld.dll]
ws2_32.dll!CheckForHookersOrChainers() + 0x22 bytes
[email protected]() + 0xa7 bytes
यह डेडलॉक प्रारंभिक धुंध के दौरान होता है। मैं देखता हूं कि टीसीपी सर्वर शुरू हो गया है और एक टीसीपी कनेक्शन स्थापित किया गया है, जबकि यूडीपी सर्वरों में से केवल एक ही शुरू किया गया है। स्टैक ट्रेस फ़ंक्शन से है जो शेष यूडीपी सर्वरों को शुरू करना चाहिए। मेरा अनुमान है कि जब मैं यूडीपी सेवर में प्रवेश करने और WSACStartup() को कॉल करने की कोशिश कर रहा हूं, तो दूसरा ट्रेड एक और सॉकेट ऑपरेशन को संभालने का प्रयास कर रहा है, उदाहरण के लिए एक नया टीसीपी कनेक्शन और यह WSAStartup() को भी कॉल कर रहा है?
मेरा सवाल यह है कि क्या कई धागे से WSAStartup() को कॉल करना इस डेडलॉक का कारण बन सकता है? मैंने यह भी जांच की है कि WSACleanup() को डेडलॉक से पहले बुलाया गया है, और यह नहीं है। निष्पादन कभी भी WSACleanup() में से किसी तक नहीं पहुंचता है।
मुझे पता है कि WSAStartup के लिए केवल एक कॉल पर्याप्त होना चाहिए हूँ, अभी तक बुला WSAStartup() कई बार एक समस्या (MSDN] 1) नहीं होना चाहिए: "एक आवेदन करता है, तो यह करने की जरूरत है एक बार से अधिक WSAStartup कॉल कर सकते हैं एक बार से अधिक WSADATA संरचना जानकारी प्राप्त करें। " इसलिए, मैं यह स्थापित करना चाहता हूं कि यह डेडलॉक WSAStartup() या कुछ और के कारण होता है।
यह आपके सवाल का कोई जवाब नहीं है, लेकिन आप को बढ़ावा देने asio (http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio.html उपयोग करने पर विचार किया)?मेरे पास उस लाइब्रेरी के साथ आपकी तरह की समस्याएं सुलझाने में बहुत आसान समय था। – nabulke
निकोलाई, मैंने इससे पहले और इसे बढ़ावा दिया था। चूंकि मैंने WinSock के साथ इस ऐप को शुरू किया है, इसलिए मैं इस मुद्दे के निचले हिस्से तक पहुंचना चाहता हूं। मुझे लगता है कि उत्सुकता के लिए :) –
क्या आपने अपने अन्य धागे के कॉल स्टैक को देखा था? –