2012-09-27 19 views
5

मेरे पास गैर अवरोधक सॉकेट का उपयोग करके एक ईवेंट संचालित सर्वर (अनुरोध प्रतिक्रिया प्रोटोकॉल - HTTP जैसे) लिखा है। मैंने एक क्लाइंट लिखकर आंशिक पढ़ा परीक्षण किया जो प्रत्येक कुछ सेकंड के बाद अलग-अलग हिस्सों में अनुरोध भेजता है। मैं आंशिक लेखन का परीक्षण कैसे करूं यानी मुझे 100 बाइट लिखने की आवश्यकता है और फिर केवल 10 बाइट्स के साथ कॉल रिटर्न भेजें।किसी नेटवर्क सर्वर का परीक्षण करने के लिए आंशिक लिखने के लिए कैसे मजबूर करें

मैं perl आधारित ग्राहकों को लिख रहा हूं। यह एसएसएल से अधिक है लेकिन इस सवाल के प्रयोजनों के लिए, मैं टीसीपी पर आंशिक लिखने के साथ ठीक हूं।

उत्तर

0

उपयोग टीसीपी प्रवाह नियंत्रण - अपने ग्राहक सॉकेट से पढ़ कर बहुत धीरे धीरे, तो इस (सर्वर) सॉकेट भेजने बफर डेटा के साथ भरता।

err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1) 

यह आउटपुट बफर का ही हिस्सा भेज बनाना चाहिए:

2

उत्पादन बफर के आकार को कम करने की कोशिश करो।

0

बहुत सारे डेटा बहुत तेज़ी से लिखें।

उत्पादन बफर बहुत छोटे (के रूप में जन ने सुझाव दिया) सुनिश्चित

या

अपनी खुद भेजने समारोह

उदा बनाएं

ssize_t mysend(int sockfd, const void *buf, size_t len, int flags) 
{ 
    int shortlen = len - 100 > 0 ? len - 100; len 
    return send(sockfd, buf, shortlen, flags); 
} 

जो < 100 बाइट भेजने के अलावा हमेशा 100 बाइट्स कम भेज देगा। अन्यथा यह भेज देगा यदि आप इसे दे सकते हैं। एक बार जब आप सत्यापित कर लें कि आपका आंशिक प्रेषण हैंडलिंग सही तरीके से काम कर रहा है, तो सामान्य भेजने के लिए कॉल को वापस भेज दें और अपने हैकरी कोड से mysend हटा दें।