पर शेष समय मैं एक लिनक्स/एआरएम मंच पर select()
का उपयोग कर रहा हूं यह देखने के लिए कि एक udp सॉकेट को एक पैकेट प्राप्त हुआ है या नहीं। मैं जानना चाहता हूं कि चयन कॉल में कितना समय शेष था यदि यह टाइमआउट से पहले लौटाता है (एक पैकेट का पता लगाया जाता है)।एक चुनिंदा() कॉल
कुछ:
int wait_fd(int fd, int msec)
{
struct timeval tv;
fd_set rws;
tv.tv_sec = msec/1000ul;
tv.tv_usec = (msec % 1000ul) * 1000ul;
FD_ZERO(& rws);
FD_SET(fd, & rws);
(void)select(fd + 1, & rws, NULL, NULL, & tv);
if (FD_ISSET(fd, &rws)) { /* There is data */
msec = (tv.tv_sec * 1000) + (tv.tv_usec/1000);
return(msec?msec:1);
} else { /* There is no data */
return(0);
}
}
मुझे यकीन नहीं है कि आपका प्रश्न क्या है। आपका कोड समस्या हल करता है; शेष समय टाइमआउट पैरामीटर पर लिखा गया है। Quoth Select (2): "लिनक्स पर, चुनें() समय समाप्ति की मात्रा को प्रतिबिंबित करने के लिए टाइमआउट को संशोधित करता है; अधिकांश अन्य कार्यान्वयन ऐसा नहीं करते हैं। (POSIX.1-2001 या तो व्यवहार की अनुमति देता है।)" – phihag
@phihag: "परमिट या तो व्यवहार "... एक चुनिंदा कॉल के बाद टाइमआउट मान को बिल्कुल देखकर गैर-पोर्टेबल –