1 #include <netinet/in.h>
11 #define BUFFER_SIZE 256
13 int main(int argc, char **argv)
15 int sock, err, file_fd;
16 ssize_t ret, len, offset, bytes_to_write;
17 struct sockaddr_in psin;
19 char buffer[BUFFER_SIZE];
22 fprintf(stderr, "Usage: %s <peer_ip> <peer_port> <file_name>\n", argv[0]);
26 printf("Opening AF_INET socket\n");
28 /* first open the file descriptor */
29 file_fd = open(argv[3], O_CREAT|O_WRONLY|O_TRUNC, 0644);
31 printf("Cannot open file for write\n");
34 printf("Opened file for write %s[%d]\n", argv[3], file_fd);
36 sock = socket(AF_INET, SOCK_DGRAM, 0);
37 printf("Socket returned: %d\n", sock);
40 printf("Cannot create AF_INET socket: %s(%d)\n",
41 strerror(errno), errno);
44 printf("Successfully created AF_INET socket: %d\n", sock);
46 host = gethostbyname(argv[1]);
47 psin.sin_family = AF_INET;
48 psin.sin_port = htons(atoi(argv[2]));
49 psin.sin_addr = *((struct in_addr *)host->h_addr);
51 if (bind(sock, (struct sockaddr *)&psin,
52 sizeof(struct sockaddr_in)) == -1) {
53 printf("Cannot bind to server: %s(%d)\n", strerror(errno), errno);
57 printf("Bound to: %s:%s\n", argv[1], argv[2]);
60 ret = read(sock, buffer, BUFFER_SIZE);
62 printf("Error while receiving file %s: %s(%d)\n", argv[0],
63 strerror(errno), errno);
65 } else if (ret == 0) {
71 len = write(file_fd, buffer+offset, bytes_to_write);
73 printf("Error while receiving file %s: %s(%d)\n", argv[0],
74 strerror(errno), errno);
77 bytes_to_write -= len;
79 } while (bytes_to_write > 0);
80 if (ret < BUFFER_SIZE)
84 printf("Successfully read file %s\n", argv[0]);