Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2012
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. int protonum = 0;
  2. struct protoent *p = getprotobyname ("IP");
  3. if (p)
  4. protonum = p->p_proto;
  5.  
  6. //////////////////////////////////
  7.  
  8. int sockin[portnum];
  9. for (int i = 0; i < portnum; ++i)
  10. {
  11. sockin[i] = socket (PF_INET, SOCK_DGRAM, protonum);
  12. if (sockin[i] < 0)
  13. {
  14. perror ("sockin");
  15. return 1;
  16. }
  17.  
  18. struct sockaddr_in sockaddr;
  19. memset (&sockaddr, 0, sizeof (sockaddr));
  20. sockaddr.sin_family = AF_INET;
  21. sockaddr.sin_addr.s_addr = htonl (INADDR_ANY);
  22. sockaddr.sin_port = htons (21928 + i);
  23.  
  24. int bindReturn;
  25. if ((bindReturn = bind (sockin[i], (struct sockaddr *)
  26. &sockaddr , sizeof (sockaddr))) != 0)
  27. {
  28. perror ("bind");
  29. return 1;
  30. }
  31. else
  32. {
  33. fprintf(stderr, "sockin %d bound to port %d. Bind returned %d\n",
  34. i, 21928 + i, bindReturn);
  35. }
  36.  
  37. // Will Hall, 2007
  38. // INADDR_ANY will bind to default interface, specify alternate interface name
  39. // on command line on which to bind
  40. struct in_addr if_addr_in;
  41. if (interface_name)
  42. {
  43. if (!get_address (sockin[i], &if_addr_in, interface_name))
  44. {
  45. fprintf (stderr, "could not find interface address for %s\n",
  46. interface_name);
  47. return 1;
  48. }
  49. if (setsockopt
  50. (sockin[i], IPPROTO_IP, IP_MULTICAST_IF, &if_addr_in,
  51. sizeof (if_addr_in)))
  52. {
  53. perror ("setsockopt:IP_MULTICAST_IF");
  54. return 1;
  55. }
  56. }
  57. else
  58. {
  59. if_addr_in.s_addr = htonl (INADDR_ANY);
  60. }
  61.  
  62. struct ip_mreq mreq;
  63. mreq.imr_multiaddr.s_addr = inet_addr ("225.0.0.37");
  64. mreq.imr_interface.s_addr = if_addr_in.s_addr;
  65. if (setsockopt
  66. (sockin[i], IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
  67. sizeof (mreq)) < 0)
  68. {
  69. perror ("setsockopt");
  70. fprintf (stderr,
  71. "your linux kernel is probably missing multicast support.\n");
  72. return 1;
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement