2011-06-16 27 views
5

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

  1. मेरी एप्लिकेशन सेटिंग में मेरे ऐप
  2. अक्षम स्थान ट्रैकिंग शुरू (ताकि कोई पृष्ठभूमि जागने)
  3. प्रेस घर बटन (एप्लिकेशन पृष्ठभूमि में चला जाता है, सॉकेट एप्लिकेशन के बाकी के साथ "फ्रीज सूखे" है)
  4. लॉक को फ़ोन
  5. अनलॉक फोन
  6. फिर से शुरू एप्लिकेशन
  7. ट्रैकिंग को पुनरारंभ करने और सॉकेट को कुछ भेजने का प्रयास करें। जैसे ही मैं कोशिश करता हूं, मुझे SIGPIPE/EPIPE त्रुटि मिलती है और ऐप क्रैश हो जाता है।

मैं इस से निपटने के लिए बंद करने और सॉकेट जब भी आवेदन बाहर निकलता है और पृष्ठभूमि ट्रैकिंग सक्षम नहीं है जारी करने के लिए सबसे अच्छा तरीका होगा लगा, लेकिन जब मैं AsyncUDPSocket पर [socket close] या [socket release] कोशिश, मैं विभिन्न EXC_BAD_ACCESS त्रुटियों मिल । मैंने देव टीम के साथ एक बग दायर किया है, लेकिन यह सोच रहा था कि अगर कोई यहां SIGPIPE त्रुटि से पूरी तरह से या सॉकेट को जारी किए बिना जीवित रखने के अन्य तरीकों से कुछ विचार दे सकता है। धन्यवाद।

उत्तर

1

बस किसी के उत्सुक (जो, इस प्रश्न के आंकड़ों का निर्धारण करते हैं, वे नहीं हैं) में, मैं यह निर्धारित करने में सक्षम नहीं था कि SIGPIPE त्रुटि क्या हो रही थी, लेकिन अंत में मेरे मेमोरी प्रबंधन के मुद्दों को हल किया गया (जो देय थे मेरे प्रतिनिधि में onUdpSocketDidClose के दोषपूर्ण कार्यान्वयन के लिए) ताकि जब भी ऐप पुनरारंभ होता है तो मैं सॉकेट को फिर से शुरू करने में सक्षम हूं।

2

ग्रेट अवलोकन - हाँ, ऐसा लगता है कि जब आप पृष्ठभूमि में कार्य भेजते हैं और फिर फोन को लॉक करते हैं, तो सॉकेट गिरा दिए जाते हैं और अगली बार जब आप इसे इस्तेमाल करने का प्रयास करते हैं तो एक सिगिप के साथ धुंधला हो जाता है। कैसे यहाँ इससे निपटने के लिए पर

विचार: SIGPIPE crash when switching background task (यह या तो सेट है SIGPIPE पूरे एप्लिकेशन के लिए, या सॉकेट के लिए के लिए उपेक्षा, या इसके लिए hanler प्रदान)

ps। यह भी लगता है कि SIGPIPE को अनदेखा करने के लिए सेटिंग संलग्न डीबगर के साथ काम नहीं करती है, इसलिए तुलना करें और w/o।