Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 29th, 2012  |  syntax: None  |  size: 1.84 KB  |  hits: 19  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. linux joining multicast group setsockopt returns errno 19 device not found
  2. int hopLimit = 1;
  3. int bAllowMultiple = 1;
  4. in_addr localAddr;
  5. localAddr.s_addr = 0;
  6.  
  7. in_addr groupAddress;
  8. groupAddress.s_addr = inet_addr(ADDRESS);
  9.  
  10. sockaddr_in groupEndPoint;
  11. groupEndPoint.sin_family = AF_INET;
  12. groupEndPoint.sin_addr = groupAddress;
  13. groupEndPoint.sin_port = htons(PORT);
  14.  
  15. SOCKET udpsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  16.  
  17. if(udpsocket == -1){
  18.     printf("Socket failn%dn", errno);
  19.     return 1;
  20. }
  21.  
  22. if(setsockopt(udpsocket, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&hopLimit, sizeof(hopLimit))==-1){
  23.     printf("sockopt failed: IP_MULTICAST_TTLn%dn", errno);
  24.     return 1;
  25. }
  26. if(setsockopt(udpsocket, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localAddr, sizeof(localAddr))==-1){
  27.     printf("sockopt failed: IP_MULTICAST_IFn%dn", errno);
  28.     return 1;
  29. }
  30. if(setsockopt(udpsocket, SOL_SOCKET, SO_REUSEADDR, &bAllowMultiple, sizeof(bAllowMultiple))==-1){
  31.     printf("sockopt failed: SO_REUSEADDRn%dn", errno);
  32.     return errno;
  33. }
  34.         // Set to non-blocking mode
  35. unsigned long bMode = 1;
  36. if(ioctl( udpsocket, FIONBIO, &bMode )==-1){
  37.     printf("ioctl failedn%dn", errno);
  38.     return errno;
  39. }
  40. sockaddr_in localEndPoint;
  41. localEndPoint.sin_family = AF_INET;
  42. localEndPoint.sin_addr.s_addr = localAddr.s_addr;
  43. localEndPoint.sin_port = groupEndPoint.sin_port;
  44.  
  45.         // Bind the socket to the port
  46. int r = bind(udpsocket, (sockaddr*)&localEndPoint, sizeof(localEndPoint));
  47. if (r != 0)
  48. {
  49.     printf("Bind failedn%dn", errno);
  50.     return errno;
  51. }
  52. // Join the multicast group
  53. struct ip_mreq imr;
  54. imr.imr_multiaddr = groupEndPoint.sin_addr;
  55. imr.imr_interface.s_addr = groupEndPoint.sin_addr.s_addr;
  56.  
  57. r = setsockopt(udpsocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(imr));
  58. printf("%dn",r);
  59. if (r == -1){
  60.     printf("sockopt failed: IP_ADD_MEMBERSHIPn%dn", errno);
  61.     return errno;
  62. }