Durante la lettura da un socket (non stream) in Linux, è possibile ottenere il timestamp (generato dall'hardware) dell'ultimo messaggio ricevuto tramite ioctl(sock, SIOCGSTAMP, &tv)
. Tuttavia, questo pone due problemi:Socket reading and timestamps
- è un altro syscall (Ricevo circa 24000 messaggi al secondo, in modo che ogni chiamata di sistema è a notifica)
- Se si utilizza questo metodo, posso solo
read()
un messaggio alla ora, seguito daioctl()
per ottenere il timestamp. (Se sto leggendo più di un messaggio in unaread()
-call, il seguenteioctl
cede solo il timestamp dell'ultimo messaggio.)
La mia domanda è come ottenere la ricezione di messaggi e le loro timestamp nel minor numero di chiamate di sistema il più possibile Sarebbe perfetto se ci fosse un syscall con semantica come "leggi quanti messaggi sono in sospeso e i loro timestamp".
Hai trovato una soluzione al tuo problema syscall? –
La soluzione accettata di seguito è una soluzione; succede solo che non potrei usarlo a causa della mia vecchia versione del kernel. – pmf