Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int protonum = 0;
- struct protoent *p = getprotobyname ("IP");
- if (p)
- protonum = p->p_proto;
- //////////////////////////////////
- int sockin[portnum];
- for (int i = 0; i < portnum; ++i)
- {
- sockin[i] = socket (PF_INET, SOCK_DGRAM, protonum);
- if (sockin[i] < 0)
- {
- perror ("sockin");
- return 1;
- }
- struct sockaddr_in sockaddr;
- memset (&sockaddr, 0, sizeof (sockaddr));
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_addr.s_addr = htonl (INADDR_ANY);
- sockaddr.sin_port = htons (21928 + i);
- int bindReturn;
- if ((bindReturn = bind (sockin[i], (struct sockaddr *)
- &sockaddr , sizeof (sockaddr))) != 0)
- {
- perror ("bind");
- return 1;
- }
- else
- {
- fprintf(stderr, "sockin %d bound to port %d. Bind returned %d\n",
- i, 21928 + i, bindReturn);
- }
- // Will Hall, 2007
- // INADDR_ANY will bind to default interface, specify alternate interface name
- // on command line on which to bind
- struct in_addr if_addr_in;
- if (interface_name)
- {
- if (!get_address (sockin[i], &if_addr_in, interface_name))
- {
- fprintf (stderr, "could not find interface address for %s\n",
- interface_name);
- return 1;
- }
- if (setsockopt
- (sockin[i], IPPROTO_IP, IP_MULTICAST_IF, &if_addr_in,
- sizeof (if_addr_in)))
- {
- perror ("setsockopt:IP_MULTICAST_IF");
- return 1;
- }
- }
- else
- {
- if_addr_in.s_addr = htonl (INADDR_ANY);
- }
- struct ip_mreq mreq;
- mreq.imr_multiaddr.s_addr = inet_addr ("225.0.0.37");
- mreq.imr_interface.s_addr = if_addr_in.s_addr;
- if (setsockopt
- (sockin[i], IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
- sizeof (mreq)) < 0)
- {
- perror ("setsockopt");
- fprintf (stderr,
- "your linux kernel is probably missing multicast support.\n");
- return 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement