Linux で (ストリーム以外の) ソケットから読み取ると、最後に受信したメッセージの (ハードウェアによって生成された) タイムスタンプをioctl(sock, SIOCGSTAMP, &tv)
. ただし、これには次の 2 つの問題があります。
- これは別のシステムコールです (毎秒約 24000 メッセージを受信しているため、各システムコールは通知可能です)
- このアプローチを使用する場合、一度に
read()
1 つのメッセージしか実行できず、その後ioctl()
にタイムスタンプを取得できます。read()
( -call で複数のメッセージを読んでいる場合、次ioctl
は最後のメッセージのタイムスタンプのみを生成します。)
私の質問は、できるだけ少ないシステムコールでメッセージとそのタイムスタンプを受信する方法です。「保留中のメッセージとそのタイムスタンプをできるだけ多く読み取る」などのセマンティクスを備えたシステムコールがあれば完璧です。