1*5e54f6d4SAugustin Cavalier /*
2*5e54f6d4SAugustin Cavalier * Copyright 2007, Haiku, Inc. All Rights Reserved.
3*5e54f6d4SAugustin Cavalier * Distributed under the terms of the MIT License.
4*5e54f6d4SAugustin Cavalier *
5*5e54f6d4SAugustin Cavalier * Authors:
6*5e54f6d4SAugustin Cavalier * Hugo Santos, hugosantos@gmail.com
7*5e54f6d4SAugustin Cavalier */
8*5e54f6d4SAugustin Cavalier
9*5e54f6d4SAugustin Cavalier #include <string.h>
10*5e54f6d4SAugustin Cavalier
11*5e54f6d4SAugustin Cavalier #include <arpa/inet.h>
12*5e54f6d4SAugustin Cavalier #include <netinet/in.h>
13*5e54f6d4SAugustin Cavalier #include <sys/socket.h>
14*5e54f6d4SAugustin Cavalier
main(int argc,char * argv[])15*5e54f6d4SAugustin Cavalier int main(int argc, char *argv[])
16*5e54f6d4SAugustin Cavalier {
17*5e54f6d4SAugustin Cavalier char buf[256];
18*5e54f6d4SAugustin Cavalier
19*5e54f6d4SAugustin Cavalier int sock = socket(AF_INET, SOCK_DGRAM, 0);
20*5e54f6d4SAugustin Cavalier
21*5e54f6d4SAugustin Cavalier sockaddr_in sin;
22*5e54f6d4SAugustin Cavalier memset(&sin, 0, sizeof(sin));
23*5e54f6d4SAugustin Cavalier sin.sin_family = AF_INET;
24*5e54f6d4SAugustin Cavalier sin.sin_port = htons(12345);
25*5e54f6d4SAugustin Cavalier
26*5e54f6d4SAugustin Cavalier bind(sock, (sockaddr *)&sin, sizeof(sin));
27*5e54f6d4SAugustin Cavalier
28*5e54f6d4SAugustin Cavalier ip_mreq mreq;
29*5e54f6d4SAugustin Cavalier memset(&mreq, 0, sizeof(mreq));
30*5e54f6d4SAugustin Cavalier
31*5e54f6d4SAugustin Cavalier inet_pton(AF_INET, argv[1], &mreq.imr_multiaddr);
32*5e54f6d4SAugustin Cavalier
33*5e54f6d4SAugustin Cavalier setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
34*5e54f6d4SAugustin Cavalier
35*5e54f6d4SAugustin Cavalier while (1) {
36*5e54f6d4SAugustin Cavalier int len = recv(sock, buf, sizeof(buf), 0);
37*5e54f6d4SAugustin Cavalier }
38*5e54f6d4SAugustin Cavalier
39*5e54f6d4SAugustin Cavalier return 0;
40*5e54f6d4SAugustin Cavalier }
41*5e54f6d4SAugustin Cavalier
42