私はこのような機能を持っています:
static int
rcv_kern(int sock, void *buf, int len, struct sockaddr *addr,
socklen_t *addrlen)
{
struct timeval timeout = {1, 0};
fd_set set;
int status;
FD_SET(sock, &set);
if ((status = select(sock + 1, &set, NULL, NULL, &timeout)) == 0) {
FD_ZERO(&set);
fprintf(stderr,
"timeout while receiving answer from kernel\n");
exit(1);
} else if (status == -1) {
FD_ZERO(&set);
perror("recvfrom failed");
exit(1);
}
FD_ZERO(&set);
return recvfrom(sock, buf, len, 0, addr, addrlen);
}
これは、netlink を使用してカーネル空間からメッセージを受信するために使用されます。しかし、実行すると、ソースコードから「カーネルからの応答を受信中にタイムアウトしました」というメッセージが常に表示されます。これは、「選択」メソッドが常に「0」を返すためです。理由がわかりません。どなたかアドバイスをいただければ幸いです。