2012-05-28 17 views
6

में 500 एमएमएस से कम समय तक टाइमआउट प्राप्त करना एमएसडीएन दस्तावेज के अनुसार सॉकेट .ेंडटाइमआउट 500ms से कम मान पर सेट करना संभव नहीं है: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendtimeout समान नियम सॉकेट के लिए मान्य है। ReceiveTimeout (यहां तक ​​कि यह नहीं है एमएसडीएन दस्तावेज में उल्लिखित, यह सच है, क्योंकि दोनों मामलों का व्यावहारिक रूप से परीक्षण किया गया था)।सॉकेट को सेट करना/.NET

क्या सॉकेट प्राप्त करने के समय के लिए कोई अन्य तरीका है, उदाहरण के लिए, इसे पूरा करने के लिए 10ms से अधिक समय लगता है?

+0

'सॉकेट। रिसीवटाइमआउट' को 10ms में सेट करने में क्या गलत है? – Reniuz

+0

यह जांचें http://stackoverflow.com/questions/9327326/socket-receivetimeout – Ras

+0

मैंने सॉकेट के साथ एक परीक्षण किया था। रिसीवटाइमआउट 10 मीटर पर सेट है। सभी 500ms के बाद असफल रहे, इसलिए मुझे लगता है कि वही नियम यहां भी लागू होता है, यहां तक ​​कि दस्तावेज़ीकरण में इसका उल्लेख नहीं किया गया है। – donatasm

उत्तर

8

सरल उत्तर "आप नहीं करते"।

Send() और Receive() कॉल तब तक प्रोग्राम के प्रवाह को अवरुद्ध करते हैं जब तक डेटा भेजा, प्राप्त या त्रुटि नहीं हुई।

यदि आप अपनी कॉल पर अधिक नियंत्रण रखना चाहते हैं, तो कई तंत्र उपलब्ध हैं। Poll() का उपयोग करना सबसे आसान है।

Socket s; 
// ... 
// Poll the socket for reception with a 10 ms timeout. 
if (s.Poll(10000, SelectMode.SelectRead)) 
{ 
    s.Receive(); // This call will not block 
} 
else 
{ 
    // Timed out 
} 

तुम भी व्यवहार के अन्य प्रकारों के लिए Select(), BeginReceive() या ReceiveAsync() उपयोग कर सकते हैं।

मैं आपको गैर-अवरुद्ध सॉकेट उपयोग पर अधिक गहन जानकारी के लिए स्टीवंस के यूनिक्स नेटवर्क प्रोग्रामिंग अध्याय 6 और 16 को पढ़ने की सलाह देता हूं। यद्यपि पुस्तक के नाम पर यूनिक्स है, फिर भी कुल सॉकेट आर्किटेक्चर अनिवार्य रूप से यूनिक्स और विंडोज (और .net)

+1

उत्तर और संदर्भ के लिए बहुत बहुत धन्यवाद। यही वही था जो मुझे चाहिए था। – donatasm

संबंधित मुद्दे