私は信頼できるUDPプロトコルを実装するためにcソケットを使用しています。私は確認応答を待っているソケットでタイムアウトを設定するために次のコードを使用しています。なぜ私はerrno 11、リソースが一時的に利用できなくなっているのかわかりません。Errno:11、Resource一時的に利用できません
また、コメントに記載されている選択方法も試しました。私はループの中に以下のコードを持っていますが、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()とnon-blockingソケットを使用してみてください。 select()のアプローチははるかに柔軟で信頼性が高く移植性があります。 –
2番目のスニペットで 'recvfrom()' intを呼び出すことはありません。 – alk
'recvfrom()'は 'int'ではなく' ssize_t'を返します。 – alk