0

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

while(1)
{
int len = recvmsg(sockid,&msghdr,0)
if(len < 0)
{perror("received failed");
exit(1);
}
processmessage

}

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

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

4

2 回答 2

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
}
于 2012-06-06T10:24:23.173 回答
0

首先你应该检查这个文件:

猫 /proc/sys/net/ipv6/conf/usb0/forwarding

确保或设置值 1:

echo "1" > /proc/sys/net/ipv6/conf/usb0/forwarding

确保 /proc/sys/net/ipv6/conf/default/forwarding 的值为 0,而内核不超过 2.6。

祝你好运!

于 2015-09-22T08:25:30.253 回答