आप संचालन प्राप्त करने के समय पर सेट करने के लिए सेटस्कॉपटॉप फ़ंक्शन का उपयोग कर सकते हैं :
SO_RCVTIMEO
समयबाह्य मान सेट करता है जो इनपुट फ़ंक्शन की पूर्ण होने तक अधिकतम समय निर्दिष्ट करता है। यह सेकंड की संख्या के साथ एक समयबद्ध संरचना को स्वीकार करता है और माइक्रोसेकंड की सीमा को निर्दिष्ट करता है कि इनपुट ऑपरेशन को पूरा करने के लिए कितने समय तक इंतजार करना है। यदि अतिरिक्त डेटा प्राप्त किए बिना इस ऑपरेशन को बहुत अधिक समय के लिए अवरुद्ध कर दिया गया है, तो यह कोई डेटा प्राप्त नहीं होने पर [EAGAIN] या [EWOULDBLOCK] पर सेट एक आंशिक गणना या ग़लती के साथ वापस आ जाएगा। इस विकल्प के लिए डिफ़ॉल्ट शून्य है, जो इंगित करता है कि एक प्राप्त संचालन समय से बाहर नहीं होगा। यह विकल्प एक समयबद्ध संरचना लेता है। ध्यान दें कि सभी कार्यान्वयन इस विकल्प को सेट करने की अनुमति नहीं देते हैं।
// LINUX
struct timeval tv;
tv.tv_sec = timeout_in_seconds;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);
// WINDOWS
DWORD timeout = timeout_in_seconds * 1000;
setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof timeout);
// MAC OS X (identical to Linux)
struct timeval tv;
tv.tv_sec = timeout_in_seconds;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);
कथित तौर पर विंडोज पर यह कॉल करने से पहले किया जाना चाहिए bind
। मैंने प्रयोग द्वारा सत्यापित किया है कि यह bind
लिनक्स या ओएस एक्स पर पहले या बाद में किया जा सकता है।