MULTICAST: IP_ADD_MEMBERSHIP & WSAENOPROTOOPT

Тема в разделе "WASM.NETWORKS", создана пользователем Black_mirror, 3 дек 2009.

  1. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Код (Text):
    1. int __cdecl _tmain(int argc, _TCHAR **argv, _TCHAR **envp){
    2.     WSAStartup(MAKEWORD(2,2),&wsad);
    3.     if((sl=socket(PF_INET,SOCK_DGRAM,0))==SOCKET_ERROR)
    4.         return printf("Can't create socket\n");
    5.     sa.sin_family=AF_INET;
    6.     sa.sin_port=htons(SERVER_PORT);
    7.     sa.sin_addr.s_addr=htonl(INADDR_ANY);
    8.     if(bind(sl,(SOCKADDR*) &sa,sizeof(sa))== SOCKET_ERROR)
    9.         return printf("Can't bind socket\n");
    10.     /* join the multicast group we want to receive datagrams from */
    11.     stIpMreq.imr_multiaddr.s_addr = htonl(0xE0E0E0E0); /* group addr */
    12.     stIpMreq.imr_interface.s_addr = htonl(INADDR_ANY); /* use default */
    13.      int nRet;
    14.     nRet = setsockopt (sl, IPPROTO_IP, IP_ADD_MEMBERSHIP,
    15.           (char FAR *)&stIpMreq, sizeof (struct ip_mreq));
    setsockopt возвращает -1, а код ошибки 10042 - WSAENOPROTOOPT, что я делаю не так?
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    winsock.h:
    Код (Text):
    1. //Options for use with [gs]etsockopt at the IP level.
    2. #define IP_OPTIONS          1           /* set/get IP per-packet options    */
    3. #define IP_MULTICAST_IF     2           /* set/get IP multicast interface   */
    4. #define IP_MULTICAST_TTL    3           /* set/get IP multicast timetolive  */
    5. #define IP_MULTICAST_LOOP   4           /* set/get IP multicast loopback    */
    6. #define IP_ADD_MEMBERSHIP   5           /* add  an IP group membership      */
    7. #define IP_DROP_MEMBERSHIP  6           /* drop an IP group membership      */
    8. #define IP_TTL              7           /* set/get IP Time To Live          */
    9. #define IP_TOS              8           /* set/get IP Type Of Service       */
    10. #define IP_DONTFRAGMENT     9           /* set/get IP Don't Fragment flag   */
    ws2tcpip.h:
    Код (Text):
    1. /* Option to use with [gs]etsockopt at the IPPROTO_IP level */
    2. #define IP_OPTIONS      1 /* set/get IP options */
    3. #define IP_HDRINCL      2 /* header is included with data */
    4. #define IP_TOS          3 /* IP type of service and preced*/
    5. #define IP_TTL          4 /* IP time to live */
    6. #define IP_MULTICAST_IF     9 /* set/get IP multicast i/f  */
    7. #define IP_MULTICAST_TTL       10 /* set/get IP multicast ttl */
    8. #define IP_MULTICAST_LOOP      11 /*set/get IP multicast loopback */
    9. #define IP_ADD_MEMBERSHIP      12 /* add an IP group membership */
    10. #define IP_DROP_MEMBERSHIP     13/* drop an IP group membership */
    11. ...
    вбил в код 12 и теперь всё работает
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ну дык если юзаешь 2ой винсок, то и нужно инклудить winsock2.h.