• [转]IP_ADD_MEMBERSHIP : 组播错误 的解决方法:


    [转]IP_ADD_MEMBERSHIP : 组播错误 的解决方法:

    http://www.cnitblog.com/dvb-dvb/archive/2012/10/15/aa.html

    by default live library includes winsock.h through windows.h instead of winsock2.h, but requires Winsock 2 in  initializeWinsockIfNecessary(...) function.
    IP_ADD_MEMBERSHIP value for Winsock1 is 5, and for Winsock 2 is 12.
    Therefore socketJoinGroup(...) function is trying to call setsockopt(IP_ADD_MEMBERSHIP) from Winsock 2 with optname from Winsock 1.
    There is the confusion between Winsock versions.


    live555的 组播的code如下 :

     testAddr.s_addr = our_inet_addr("228.67.43.91"); // arbitrary
          Port testPort(15947); // ditto

          sock = setupDatagramSocket(env, testPort);
          if (sock < 0) break;

          if (!socketJoinGroup(env, sock, testAddr.s_addr))
       {
        env<<"Failed to socket Join Group ";
        break;
       }


    结果:

     if (setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP,
       (const char*)&imr, sizeof (struct ip_mreq)) < 0) {

    一直失败:错误提示为: 10042:

    修改为: if (setsockopt(socket, IPPROTO_IP, 12,
       (const char*)&imr, sizeof (struct ip_mreq)) < 0) {


    因为不同的socket版本,定义IP_ADD_MEMBERSHIP 的值不同:

    in socket ver1.0中:
    #define IP_ADD_MEMBERSHIP 5

    in socket ver2.0中:
    #define IP_ADD_MEMBERSHIP 12

  • 相关阅读:
    函数指针_typedef
    网络学习_2
    网络学习_1
    字节序
    string相关总结
    C++ const用法总结
    U盘安装CentOS 7.0
    windows平台CodeBlocks MinGW C++11开发环境搭建
    关于32位windows与4GB内存的那些事儿
    开启win7系统关闭日志分析
  • 原文地址:https://www.cnblogs.com/vc60er/p/4214258.html
Copyright © 2020-2023  润新知