fix build on FreeBSD (issue #5003)
[asterisk/asterisk.git] / utils / streamplayer.c
1 /*
2 * streamplayer.c
3 *
4 * A utility for reading from a stream
5
6 * Copyright (C) 2005, Digium, Inc.
7 *
8 * Russell Bryant <russell@digium.com>
9 *
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
12 *
13 * $Revision$ 
14 */
15
16 #include <stdlib.h>
17 #include <stdio.h>
18 #include <string.h>
19 #include <netdb.h>
20 #include <unistd.h>
21 #include <sys/types.h>
22 #include <sys/socket.h>
23 #if defined(__FreeBSD__)
24 #include <netinet/in.h>
25 #endif
26 #include <sys/time.h>
27
28
29 int main(int argc, char *argv[])
30 {
31         struct sockaddr_in sin;
32         struct hostent *hp;
33         int s;
34         int res;
35         char buf[2048];
36         fd_set wfds;
37         struct timeval tv;
38
39         if (argc != 3) {
40                 fprintf(stderr, "Usage: ./streamplayer <ip> <port>\n");
41                 exit(1);
42         }
43
44         hp = gethostbyname(argv[1]);
45         if (!hp) {
46                 fprintf(stderr, "Unable to lookup IP for host '%s'\n", argv[1]);
47                 exit(1);
48         }
49
50         memset(&sin, 0, sizeof(sin));
51         
52         sin.sin_family = AF_INET;
53         sin.sin_port = htons(atoi(argv[2]));
54         memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
55         
56         s = socket(AF_INET, SOCK_STREAM, 0);
57         
58         if (s < 0) {
59                 fprintf(stderr, "Unable to allocate socket!\n");
60                 exit(1);
61         }       
62
63         res = connect(s, (struct sockaddr *)&sin, sizeof(sin));
64         
65         if (res) {
66                 fprintf(stderr, "Unable to connect to host!\n");
67                 close(s);
68                 exit(1);        
69         }
70
71         while (1) {
72                 res = read(s, buf, sizeof(buf));
73
74                 if (res < 1)
75                         break;          
76         
77                 memset(&tv, 0, sizeof(tv));             
78                 FD_ZERO(&wfds);
79                 FD_SET(1, &wfds);
80
81                 select(2, NULL, &wfds, NULL, &tv);
82
83                 if (FD_ISSET(1, &wfds))
84                         write(1, buf, res);
85         }
86
87         close(s);
88         exit(res);
89 }