我有一個功能,正如這一點:Linux套接字編程調試?
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);
}
其用於使用網絡鏈路從內核空間接收消息。但是當我運行它的時候,結果總是說源代碼中的「從內核收回答案時超時」的消息,這是由於「select」方法總是返回「0」的原因造成的。我不知道原因,誰能給我一些建議,謝謝。
也許你創建套接字有什麼問題?或者做了一個綁定到套接字?爲了創建netlink套接字,你應該使用套接字(PF_NETLINK,SOCK_RAW,NETLINK_ROUTE);並綁定你應該指定一個地址與結構sockaddr_nl和成員nl_family = AF_NETLINK。 – 2009-05-05 02:00:15
是的,我已經照你所說的去做了。 – 2009-05-05 02:15:26
只要先做recvfrom並讓它工作正常。一旦你確定你的套接字工作正常,做你的選擇的東西 – shodanex 2009-06-17 13:12:42