enter code here
我正在尝试使用inet6系列从网络接口usb0读取路由器请求数据包
我创建了原始套接字并将原始套接字绑定到USB0接口
我正在尝试使用循环作为
while(1)
{
int len = recvmsg(sockid,&msghdr,0)
if(len < 0)
{perror("received failed");
exit(1);
}
processmessage
}
问题是我收到错误:收到失败的资源暂时无法使用
我想知道socket仍然存在,接口存在且绑定成功。可能是错误的可能原因是什么?
答案 0 :(得分:1)
如果errno是EAGAIN,您可以重试recvmsg一段时间然后稍后退出:
int retryCount = 0;
while(1) {
int len = recvmsg(sockid,&msghdr,0)
if (len < 0) {
if ((errno == EAGAIN) && (++retryCount < 128))
continue;
perror("received failed");
exit(1);
}
retryCount = 0;
processmessage
}
答案 1 :(得分:0)
首先你应该检查这个文件:
cat / proc / sys / net / ipv6 / conf / usb0 / forwarding
确保或设置值1:
回声&#34; 1&#34; &GT;的/ proc / SYS /净/ IPV6 / CONF / USB0 /转发确保/ proc / sys / net / ipv6 / conf / default / forwarding的值为0,而内核不超过2.6。
祝你好运!