Суть проблемы : Я сделал сетевой эмулятор на FPGA который позволяет имитировать разные проблемы сети - задержку, уменьшение Daterate, потерю пакетов и т.д. Мой эмулятор может имитировать задержку прохождения пакетов в диапозоне 1 нс до 4 сек. Что бы проверить, была написана программа на с++ которая работает с сырыми сокетами. Я формирую пакеты вручную и отправляю их, а потом жду когда они придут обратно и замерю время. И вот тут начинается какая то непонятная фигня. Иногда показывает правильное время - более менее правдоподобное 840 мс, а иногда 1421165742397 мс. Что конечно не может быть в принципе.
Для замера времени использую функцию :
long mtime() {
struct timeval t;
gettimeofday(&t, NULL);
long mt = (long)t.tv_sec * 1000 + t.tv_usec / 1000;
return mt;
}
и в коде после отслыки
long t;
if ( sendto(sock[0], sendbuf, tx_len, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll)) )
t = mtime();
numbytes = recvfrom(sock[1], buf, BUF_SIZE, 0, NULL, NULL);
if ( eh_rec->ether_dhost == MY_MAC )
t = mtime() - t;
printf ("Delay is %ld milliseconds.\n",t);
OS: Ubuntu 14.04.1 LTS Desktop (64-bit)