7

を使用した c を使用して単純なアプリケーションを作成し、recvmmsg()渡された 5 番目のパラメーターは timeout oftype struct timespecです。タイムアウトを 5 秒に設定しましたが、機能せず、無限にブロックされます。

コードは次のとおりです。

struct timespec timeout;

timeout.tv_sec =  5;
timeout.tv_nsec = 0;

result = recvmmsg(fd, datagrams, BATCH_SIZE, 0, &timeout);
4

3 に答える 3

6

setsockopt別の方法として、 withオプションを使用しSO_RCVTIMEOてソケットにタイムアウトを設定することもできます。これは、その上で実行されるすべての読み取り操作に影響します。

于 2013-05-02T15:23:41.357 に答える
0

recvmmsg の実装にバグがあります:

データpselectが利用可能かどうかを確認できるようにします。ただし、recvmmsgいつまでも待たないことを保証するものではありません。したがって、この方法は使用しないでください。

recvmmsg のパ​​ラメータのSO_RCVTIMEO追加で使用することをお勧めします。以後timeoutデータが受信されない場合、recvmmsg は終了します。最悪の場合、recvmmsg は+の後に終了します (終了直前にデータが受信され、それ以上データが到着しない場合)。SO_RCVTIMEOtimeouttimeoutSO_RCVTIMEOtimeout

于 2015-03-04T09:34:12.010 に答える