2012-11-09 4 views
5

Linux에서 (비 스트림) 소켓에서 읽을 때 ioctl(sock, SIOCGSTAMP, &tv)을 통해 마지막 수신 메시지의 (하드웨어에서 생성 된) 타임 스탬프를 가져올 수 있습니다. 그러나이 두 가지 문제 제기 :소켓 읽기 및 타임 스탬프

  • 그것은 또 다른 콜이다 (I 초당 약 24000 메시지를 수신하고 있습니다를, 각각의 콜은 신고 대상 임)에서
  • 만약이 방법을 사용하여, 내가 할 수있는 유일한 read() 하나의 메시지 시간은 ioctl()이며 시간 소인이 표시됩니다. (필자는이 ioctl를 수행하면 마지막 메시지의 타임 스탬프를 산출하는 read() 울어 하나 이상의 메시지를 읽고 있어요 경우.)

내 질문은 몇 콜에 메시지와 자신의 타임 스탬프를 수신 달성하는 방법입니다 가능한 한. "보류중인 메시지와 타임 스탬프"와 같은 의미 체계를 가진 시스템 콜이 있다면 완벽 할 것입니다.

+1

당신의 syscall 문제에 대한 해결책을 찾았습니까? –

+1

아래에 허용 된 솔루션은 해결책입니다. 그것은 아주 오래된 커널 버전 때문에 사용할 수 없었습니다. – pmf

답변

6

커널에서 사용 가능한 경우 recvmmsg(2) 시스템 호출을 사용하고 SO_TIMESTAMP 옵션을 설정하십시오.

+1

아, 나는 recvmsg가 아니라 recvmsg를 만난 적이있다. 감사! – pmf