delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2009/02/20/07:48:43

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 <corinna-cygwin AT cygwin DOT com>
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
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
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
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/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019