#include #include #include #include #include int sock; struct ts_pkt { struct timeval tv; char rsvd[32 - sizeof(struct timeval)]; }; void *receiverThread(void *arg) { int i = 100; struct ts_pkt ts; struct timeval tv; float delay; while(i--) { int r = recv(sock, &ts, sizeof(ts), 0); perror("recv"); gettimeofday(&tv, NULL); delay = tv.tv_sec - ts.tv.tv_sec + ((tv.tv_usec - tv.tv_usec) / 1000000); printf("received: %d %d %d %f\n", r, ts.tv.tv_sec, ts.tv.tv_usec, delay); } } void *senderThread(void *arg) { int i = 100; struct ts_pkt ts; int len = 64; while(i--) { gettimeofday(&ts.tv, NULL); send(sock, &ts, sizeof(ts), 0); printf("%d %d\n", ts.tv.tv_sec, ts.tv.tv_usec); usleep(20000); } } int main(void) { struct sockaddr_in sa; int len = sizeof(sa); pthread_t receiver, sender; memset(&sa, 0, sizeof(sa)); sock = socket(PF_INET, SOCK_DGRAM, 0); sa.sin_port = htons(12388); sa.sin_family = PF_INET; bind(sock, (struct sockaddr *)&sa, len); while(1) { char buf[32]; int r; r = recvfrom(sock, buf, 32, 0, (struct sockaddr *)&sa, &len); if(sendto(sock, buf, r, 0, (struct sockaddr *)&sa, len) == -1) perror("sendto"); } }