2010-12-08 11 views
5

मैं एक सर्वर को कार्यान्वित कर रहा हूं जो कई समवर्ती कनेक्शन स्वीकार करता है।gen_tcp है: स्वीकार/1 सुरक्षित?

मैं इस संरचना का प्रयोग किया:

loop(Sock) -> 
    case gen_tcp:accept(Sock) of 
     {ok, CSock} ->  
      fork_handling_process(CSock); 
     {error, Reason} -> 
      do_something_else(); 
    end, 
    loop(Sock). 

किसी ने मुझे एक SYN भेजता है, तो मैं सोच रहा हूँ, लेकिन मेरे सर्वर एसीके के जवाब में एक SYN एसीके भेजता है मुझे कभी नहीं, अपने सर्वर है कि ग्राहक के बाद से हमेशा के लिए अवरुद्ध हो जाएगा मैं gen_tcp को कॉल करता हूं: बिना टाइमआउट के स्वीकार करता हूं?

जिस तरह से मुझे लगता है कि इस स्थिति को अनुकरण करना मुश्किल है, इसलिए कृपया मुझे बताएं कि क्या आपके पास इसे आजमाने का तरीका है।

अग्रिम में Thx।

उत्तर

4

जब आप सुन/इसके थोड़ी अलग रूप में आप का वर्णन स्वीकार करते हैं:, यह एक SYN भेजता है, तो आपके ऑपरेटिंग सिस्टम एक SYN/एसीके (erlang involvled नहीं) भेजता है जब आप पाते हैं:

कुछ ग्राहक कनेक्ट करना चाहता है एसीके gen_tcp: स्वीकार वापस आ जाएगा।

जब कोई आपको एसईएन भेजता है और कुछ भी नहीं (यह एक बड़ी मात्रा में किए जाने पर एक एसईएन बाढ़ हमला होगा) तो ऑपरेटिंग सिस्टम संसाधन आरक्षित होंगे लेकिन आपके एरलांग कोड में कुछ भी नहीं होता है क्योंकि एक तीन तरह का हैंडशेक अभी तक पूरा नहीं हुआ है ।

कई ऑपरेटिंग सिस्टम बहुत अधिक संसाधन खपत से परहेज करते हुए एसईएन बाढ़ के हमलों की विशेष देखभाल कर रहे हैं।

0

जिस दृष्टिकोण का आप उपयोग कर रहे हैं वह ठीक है। आपका सर्वर अवरुद्ध नहीं होगा। अगर कुछ गलत हो जाता है तो मेरा मानना ​​है कि आपकी फोर्क की गई प्रक्रिया त्रुटि प्राप्त करेगी, सर्वर नहीं।

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