Subject: RE: Cygwin 1.5.18: Problem using setsockopt() for multicast
From: Brian Ford <[email-masked]>
Cc: [email-masked]
Date: Thu, 17 Aug 2006 09:06:36 -0500

On Thu, 17 Aug 2006, Dave Korn wrote:
> On 17 August 2006 14:45, Brian Ford wrote:
> > On Thu, 17 Aug 2006, Alessandro Saffiotti wrote:
> >>   imreq.imr_interface.s_addr = INADDR_ANY;
> >
> > INADDR_ANY is in host byte order, but you need network order for this
> > call.
>
>   Yeh, that's it!  And don't forget to use left-handed bits - the ordinary
> right-handed ones are no good for INADDR_ANY.  :)

Sorry, not enough coffee yet this morning ;-).  I was up all night with my
two month old daughter.

My point should have been that I use this construct every day in 1.5.18
and 1.5.21 within our application and it works fine.  I saw very few
differences.  Here is my snippet in case I missed something else obvious:

fd = socket(AF_INET, SOCK_DGRAM, 0);

Oh yeah, you must call the setsockopt below after the bind on windows.
Search MSDN for why.

{
    struct ip_mreq mreq;

    mreq.imr_interface.s_addr = htonl(INADDR_ANY);
    mreq.imr_multiaddr.s_addr = inet_addr("224.0.0.1");

    if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
                   sizeof(mreq)) < 0)
        perror("Unable to join 224.0.0.1");
}

-- 
Brian Ford
Lead Realtime Software Engineer
VITAL - Visual Simulation Systems
FlightSafety International
the best safety device in any aircraft is a well-trained crew...

.

--
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/