从原始套接字接收失败

时间:2012-06-06 09:01:35

标签: linux sockets

enter code here我正在尝试使用inet6系列从网络接口usb0读取路由器请求数据包 我创建了原始套接字并将原始套接字绑定到USB0接口 我正在尝试使用循环作为

从接口读取数据
while(1)
{
int len = recvmsg(sockid,&msghdr,0)
if(len < 0)
{perror("received failed");
exit(1);
}
processmessage

}

问题是我收到错误:收到失败的资源暂时无法使用

我想知道socket仍然存在,接口存在且绑定成功。可能是错误的可能原因是什么?

2 个答案:

答案 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。

祝你好运!