diff options
Diffstat (limited to 'btimed.c')
-rw-r--r-- | btimed.c | 28 |
1 files changed, 19 insertions, 9 deletions
@@ -21,7 +21,8 @@ int main(int argc, char **argv) { int sd; - char msg[BTIME_MSGLEN]; + char inmsg[BTIME_MSGLEN]; + char outmsg[BTIME_MSGLEN]; struct sockaddr_in cli_addr; int cli_addr_len; ssize_t nbytes; @@ -31,15 +32,24 @@ main(int argc, char **argv) /* Running out of (x)inetd the socket was duped onto stdin. */ sd = fileno(stdin); - memset(&cli_addr, 0, sizeof cli_addr); - cli_addr_len = sizeof cli_addr; - nbytes = recvfrom(sd, &msg, BTIME_MSGLEN, MSG_WAITALL, - (struct sockaddr *)&cli_addr, &cli_addr_len); + /* We want to exit after 30 seconds of inactivity */ + alarm(30); - memset(msg, 0, BTIME_MSGLEN); - sprintf(msg, "%u\n", get_btime()); - sendto(sd, &msg, BTIME_MSGLEN, MSG_DONTWAIT, - (struct sockaddr *)&cli_addr, cli_addr_len); + /* Generate the standard btime message */ + memset(outmsg, 0, BTIME_MSGLEN); + sprintf(outmsg, "%u\n", get_btime()); + + for (;;) { + memset(&cli_addr, 0, sizeof cli_addr); + cli_addr_len = sizeof cli_addr; + nbytes = recvfrom(sd, &inmsg, BTIME_MSGLEN, MSG_WAITALL, + (struct sockaddr *)&cli_addr, &cli_addr_len); + + sendto(sd, &outmsg, BTIME_MSGLEN, MSG_DONTWAIT, + (struct sockaddr *)&cli_addr, cli_addr_len); + /* We want to exit after 30 seconds of inactivity */ + alarm(30); + } return 0; } |