신뢰할 수있는 UDP 프로토콜을 구현하기 위해 소켓을 사용하고 있습니다. 다음 코드를 사용하여 승인을 기다리는 소켓에서 시간 초과를 설정하고 있습니다. 내가 왜 errno 11, 자원을 일시적으로 사용할 수 없게되는지 잘 모르겠습니다.Errno : 11, Resource temporary unavailable
나는 또한 코멘트에서 언급 한 선택 방법을 시도했다. 루프 안에 다음과 같은 코드가 있지만 recvfrom은 시간 초과되지 않습니다.
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");
}
대신 select() 및 비 블로킹 소켓을 사용해보십시오. select() 접근 방식은 훨씬 더 유연하고 안정적이며 이식성이 뛰어납니다. –
두 번째 스 니펫에서'recvfrom()'int를 호출 할 필요가 없습니다. – alk
'recvfrom()'은'int'가 아닌'ssize_t'를 리턴합니다, BTW. – alk