読み取るデータがあるかどうかを確認するために、UDP ソケットで select() を呼び出しています。メソッドが -1 を返し、errno が 22 (無効な引数) に設定されるたびに。ここに私のコードの一部があります:
fd_set sockets;
struct timeval alarm;
alarm.tv_sec = 0;
alarm.tv_usec = 1000;
FD_ZERO(&sockets);
FD_SET(udpSocket, &sockets);
maxfd = udpsocket + 1;
selected = select(maxfd, &sockets, NULL, NULL, &alarm);
printf("%d\n", selected);
「選択済み」は常に -1 です。この時点ですでにデータを正常に送信しているため、ソケットが正常であることはわかっています。