X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org Date: Fri, 20 Feb 2009 13:48:14 +0100 From: Corinna Vinschen To: cygwin AT cygwin DOT com Subject: Re: Problem Adding Membership Multicast Errno 22 Message-ID: <20090220124814.GC24834@calimero.vinschen.de> Reply-To: cygwin AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com References: <22119431 DOT post AT talk DOT nabble DOT com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <22119431.post@talk.nabble.com> User-Agent: Mutt/1.5.17 (2007-11-01) Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com 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/