On Feb 20 04:05, victhor_1983 wrote: > > Hi, > > I have written a C++ program for a Multicast Client that compiles and runs > on Ubuntu. I tried to compile and run it on Cygwin version 1.5.25 (June > 2008). However, when I run the code, the Multicast receiving socket doesn't > seem to work. The problem comes when I use setsockopt() to add Multicast > membership. The errno() declaration returns 22 (EINVAL), but I cannot find a > solution. My code is: > > int Descriptor, Descriptor2, payloadoffset,sqnum, T_ns, status; > long nsegundos,Dnsegundos, segundos, Dsegundos; > struct sockaddr_in Direccion, Direccion2; > unsigned short Puerto; > struct timespec valorcontador,valorcontador2,Next; > struct ip_mreq Multic; > > Descriptor=socket(AF_INET,SOCK_DGRAM,0); > Puerto=12100; > Direccion.sin_family=AF_INET; > Direccion.sin_port=htons(Puerto); > Direccion.sin_addr.s_addr=inet_addr("224.0.22.1"); > memset(&(Direccion.sin_zero),'\0',8); > > Multic.imr_multiaddr.s_addr=inet_addr("224.0.22.1"); > Multic.imr_interface.s_addr=inet_addr("138.4.32.34"); > status= setsockopt(Descriptor, IPPROTO_IP, IP_ADD_MEMBERSHIP, &Multic, > sizeof(Multic)); > if (status<0){ > printf("Fallo al aƱadir el grupo de Multicast, codigo %i\n", > errno); > }
I'm sorry, I can't tell you why this doesn't work. Cygwin's setsockopt function is basically just a shim between application and Winsock's setsockopt call. It only performs special actions on a very limited set of options, only two actually: (SOL_SOCKET, SO_REUSEADDR) and (IPPROTO_IP, IP_TOS). I'm also quite multicast illiterate. Is it possible that you have to use the IP_MULTICAST_IF option on Windows before you can use IP_ADD_MEMBERSHIP?!? Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/