मैं एक विश्वसनीय यूडीपी प्रोटोकॉल को लागू करने के लिए सी सॉकेट का उपयोग कर रहा हूं। मैं सॉकेट पर टाइमआउट सेट करने के लिए निम्न कोड का उपयोग कर रहा हूं जिसमें मैं एक पावती की प्रतीक्षा कर रहा हूं। मुझे यकीन नहीं है कि मुझे त्रुटि 11 क्यों मिल रही है, संसाधन अस्थायी रूप से अनुपलब्ध है।एरर्नो: 11, संसाधन अस्थायी रूप से अनुपलब्ध
//set timer for recv_socket
struct timeval tv;
tv.tv_usec = TIMEOUT_MS;
if(setsockopt(rcv_sock, SOL_SOCKET, SO_RCVTIMEO,&tv,sizeof(tv)) < 0){
printf("Error setting the socket timeout.\n");
}
int recv_msg_len;
if(recv_msg_len = recvfrom(rcv_sock, ackBuffer,sizeof(ackBuffer), 0,
(struct sockaddr *) &servAddr2, &fromSize) < 0){
//timeout reached
printf("Error Reporting: %d : %s\n", errno, strerror(errno));
num_timeouts++;
}
मैंने टिप्पणियों में वर्णित चुनिंदा विधि का भी प्रयास किया है। मेरे पास एक लूप के अंदर निम्न कोड है, लेकिन रिकॉर्म्स कभी खत्म नहीं होता है।
fd_set set;
FD_ZERO(&set); /* empties the set */
FD_CLR(rcv_sock,&set); /* removes FD from the set */
FD_SET(rcv_sock,&set); /* adds FD to the set */
if(select(rcv_sock + 1, &set, NULL, NULL, &tv) < 0){
printf("\nError Reporting: %d : %s\n\n", errno, strerror(errno));
return -1;
}
if(!FD_ISSET(rcv_sock,&set)){ /* true if FD is in the set */
printf("socket is not set properly.\n");
}
इसके बजाय चयन() और गैर-अवरुद्ध सॉकेट का उपयोग करने का प्रयास करें। चयन() दृष्टिकोण अधिक लचीला, भरोसेमंद और पोर्टेबल है। –
'snvfrom()' int वह दूसरा स्निपेट करने के लिए कोई कॉल नहीं है। – alk
'recvfrom()' रिटर्न 'ssize_t' नहीं 'int', बीटीडब्ल्यू। – alk