我有一个这样的功能:
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”的原因。不知道原因,谁能给我一些建议,谢谢。