Correzioni rimaste indietro ed espansione funzioni del resolver.
[gapil.git] / listati / UDP_daytimed.c
1 int main(int argc, char *argv[])
2 {
3     int sock;
4     int i, n, len, verbose=0;
5     struct sockaddr_in addr;
6     char buffer[MAXLINE];
7     time_t timeval;
8     ...
9     /* create socket */
10     if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
11         perror("Socket creation error");
12         exit(-1);
13     }
14     /* initialize address */
15     memset((void *)&addr, 0, sizeof(addr));     /* clear server address */
16     addr.sin_family = AF_INET;                  /* address type is INET */
17     addr.sin_port = htons(13);                  /* daytime port is 13 */
18     addr.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
19     /* bind socket */
20     if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
21         perror("bind error");
22         exit(-1);
23     }
24     /* write daytime to client */
25     while (1) {
26         n = recvfrom(sock, buffer, MAXLINE, 0, (struct sockaddr *)&addr, &len);
27         if (n < 0) {
28             perror("recvfrom error");
29             exit(-1);
30         }
31         if (verbose) {
32             inet_ntop(AF_INET, &addr.sin_addr, buffer, sizeof(buffer));
33             printf("Request from host %s, port %d\n", buffer,
34                    ntohs(addr.sin_port));
35         }
36         timeval = time(NULL);
37         snprintf(buffer, sizeof(buffer), "%.24s\r\n", ctime(&timeval));
38         n = sendto(sock, buffer, strlen(buffer), 0, 
39                    (struct sockaddr *)&addr, sizeof(addr));
40         if (n < 0) {
41             perror("sendto error");
42             exit(-1);
43         }
44     }
45     /* normal exit */
46     exit(0);
47 }