私はこのような機能を持っています:
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」を返すためです。理由がわかりません。どなたかアドバイスをいただければ幸いです。