0

少し問題がありますが、解決策が見つかりません。

問題は非常に単純なようです。

私にはプロセスがあります。このプロセス内で、使用しているポートに送信された UDP メッセージがあるかどうかを確認したいと思います。メッセージが送信された場合、送受信全体は問題ありません。メッセージが送信されない場合、プロセスはメッセージを待機しており、次のメッセージが送信されるまでプログラムは続行されません。

問題は、メッセージがない場合にプロセスを続行できるようにコードを変更するにはどうすればよいかということです。

マイ コード (UDP メッセージを受信するための標準コード):

if((nbrecv = recvfrom(s, buffer, BUFFER_SIZE, 0, &remote, &len_remote)) == -1){
    fprintf(stderr, "failure!\n");
    exit(-1);
}

etc.
4

1 に答える 1

2

オプションは次のとおりです。

  1. select()poll()、などを使用して、直接epoll()呼び出す代わりにデータを待ちますrecvfrom()
  2. O_NONBLOCKを使用してソケットにフラグを設定し、ソケットをノンブロッキングに設定しますfcntl()。これrecvfrom()により、ブロックする代わりにすぐに戻ります。
  3. SO_RCVTIMEO(非推奨) socket オプションを使用して受信タイムアウトを設定します。
于 2013-10-23T10:16:07.100 に答える