/* Sample UDP server */ #include #include #include #include #include #define MAX_DGRAM_SIZE 1500 #define RTR_RESPONDER_PORT 65500 struct rtr_mesg { unsigned short saa_engine; unsigned short reserved1; unsigned long sender_tstamp; unsigned long responder_tstamp; unsigned short index; unsigned short reserved2; char payload[MAX_DGRAM_SIZE - 16]; }; int main(int argc, char**argv) { int sockfd, n; struct sockaddr_in servaddr, cliaddr; socklen_t len; struct rtr_mesg mesg; struct timeval tv; unsigned long tod; sockfd = socket(AF_INET, SOCK_DGRAM, 0); memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(RTR_RESPONDER_PORT); bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); for (;;) { len = sizeof(cliaddr); n = recvfrom(sockfd, (void *) &mesg, sizeof(mesg), 0, (struct sockaddr *) &cliaddr, &len); gettimeofday(&tv, 0); tod = ( tv.tv_sec % 86400 ) * 1000 + ( tv.tv_usec / 1000 ); mesg.responder_tstamp = htonl(tod); sendto(sockfd, (void *)&mesg, n, 0, (struct sockaddr *) &cliaddr, sizeof(cliaddr)); } }