e1459d9abe6994f445db485819a2aa7954181aa8
[gapil.git] / listati / TCP_daytime.c
1 #include <sys/types.h>   /* predefined types */
2 #include <unistd.h>      /* include unix standard library */
3 #include <arpa/inet.h>   /* IP addresses conversion utilities */
4 #include <sys/socket.h>  /* socket library */
5 #include <stdio.h>       /* include standard I/O library */
6
7 int main(int argc, char *argv[])
8 {
9     int sock_fd;
10     int i, nread;
11     struct sockaddr_in serv_add;
12     char buffer[MAXLINE];
13      ...
14     /* create socket */
15     if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
16         perror("Socket creation error");
17         return -1;
18     }
19     /* initialize address */
20     memset((void *) &serv_add, 0, sizeof(serv_add)); /* clear server address */
21     serv_add.sin_family = AF_INET;                   /* address type is INET */
22     serv_add.sin_port = htons(13);                   /* daytime post is 13 */
23     /* build address using inet_pton */
24     if ( (inet_pton(AF_INET, argv[optind], &serv_add.sin_addr)) <= 0) {
25         perror("Address creation error");
26         return -1;
27     }
28     /* extablish connection */
29     if (connect(sock_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
30         perror("Connection error");
31         return -1;
32     }
33     /* read daytime from server */
34     while ( (nread = read(sock_fd, buffer, MAXLINE)) > 0) {
35         buffer[nread]=0;
36         if (fputs(buffer, stdout) == EOF) {          /* write daytime */
37             perror("fputs error");
38             return -1;
39         }
40     }
41     /* error on read */
42     if (nread < 0) {
43         perror("Read error");
44         return -1;
45     }
46     /* normal exit */
47     return 0;
48 }