6

Linux で (ストリーム以外の) ソケットから読み取ると、最後に受信したメッセージの (ハードウェアによって生成された) タイムスタンプをioctl(sock, SIOCGSTAMP, &tv). ただし、これには次の 2 つの問題があります。

  • これは別のシステムコールです (毎秒約 24000 メッセージを受信して​​いるため、各システムコールは通知可能です)
  • このアプローチを使用する場合、一度にread()1 つのメッセージしか実行できず、その後ioctl()にタイムスタンプを取得できます。read()( -call で複数のメッセージを読んでいる場合、次ioctlは最後のメッセージのタイムスタンプのみを生成します。)

私の質問は、できるだけ少ないシステムコールでメッセージとそのタイムスタンプを受信する方法です。「保留中のメッセージとそのタイムスタンプをできるだけ多く読み取る」などのセマンティクスを備えたシステムコールがあれば完璧です。

4

1 に答える 1

6

recvmmsg(2)カーネルで使用可能な場合はシステム コールを使用し、オプションを設定しますSO_TIMESTAMP

于 2012-11-09T13:21:32.967 に答える