0

enter code hereInet6 ファミリを使用してネットワーク インターフェイス 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 に答える