2012-11-09 18 views
5

Linuxの(ストリームではない)ソケットから読み取るとき、最後に受信したメッセージの(ハードウェアで生成された)タイムスタンプをioctl(sock, SIOCGSTAMP, &tv)で取得できます。しかし、これは二つの問題提起:ソケットの読み込みとタイムスタンプ

  • それは別のシステムコールである(私は毎秒約24000のメッセージを受信して​​いますが、その各システムコールは届け出である)で
  • 場合は、このアプローチを使用して、私ができる唯一のread()一つのメッセージ時刻はioctl()となり、タイムスタンプが取得されます。 (私は、以下の、read() -callに複数のメッセージを読んでいる場合ioctlのみ最後のメッセージのタイムスタンプを生成する。)

私の質問は、わずかシステムコールでメッセージとそのタイムスタンプを受けて実現する方法でありますできるだけ。 「保留中のメッセージとそのタイムスタンプ」などのセマンティクスを持つシステムコールがあれば完璧です。

+1

あなたのシステムコールの問題を解決しましたか? –

+1

以下の解決策は解決策です。私は非常に古いカーネルバージョンのためにそれを使用できませんでした。 – pmf

答えて

6

カーネルで利用可能であれば​​システムコールを使用し、SO_TIMESTAMPオプションを設定します。

+1

ああ、私はrecvmsgではなく、recvmsgに出会っただけです。ありがとう! – pmf

関連する問題