[ace-users] question on ACE_INET_Addr
Steve Huston
shuston at riverace.com
Thu Aug 2 14:11:44 CDT 2007
Ok, great - thanks for the feedback on this, Andre!
--
Steve Huston, Riverace Corporation
Would you like ACE to run great on your platform?
See http://www.riverace.com/sponsor.htm
> -----Original Message-----
> From: Andre Kostur [mailto:akostur at incognito.com]
> Sent: Thursday, August 02, 2007 3:03 PM
> To: Steve Huston; Phil Mesnier; Premkumar P
> Cc: ace-users at cse.wustl.edu
> Subject: RE: [ace-users] question on ACE_INET_Addr
>
>
> I've worked with the IPv6 stuff in ACE, and using the
> ACE_USES_IPV4_IPV6_MIGRATION (plus ipv6=1 in the features file) was
> enough for my code to work on a v4-only host. However, I haven't
used
> the Proactor yet.
>
> -----Original Message-----
> From: ace-users-bounces at cse.wustl.edu
> [mailto:ace-users-bounces at cse.wustl.edu] On Behalf Of Steve Huston
> Sent: Thursday, August 02, 2007 11:34 AM
> To: 'Phil Mesnier'; 'Premkumar P'
> Cc: ace-users at cse.wustl.edu
> Subject: Re: [ace-users] question on ACE_INET_Addr
>
> Hi folks,
>
> Phil, your patch looks correct - as long as it works for Premkumar
;-)
>
> I think, if I've understood this correctly, that the issue arose
> because Premkumar built on a system containing all the IPv6 support
> and ran on a different system that does not have IPv6 support. Or,
at
> least, one that has the support there but no IPv6 configured, so
it's
> essentially an IPv4 box.
>
> -Steve
>
> --
> Steve Huston, Riverace Corporation
> Would you like ACE to run great on your platform?
> See http://www.riverace.com/sponsor.htm
>
>
> > -----Original Message-----
> > From: Phil Mesnier [mailto:mesnier_p at ociweb.com]
> > Sent: Thursday, August 02, 2007 10:12 AM
> > To: Premkumar P
> > Cc: ace-users at cse.wustl.edu; shuston at riverace.com
> > Subject: Re: [ace-users] question on ACE_INET_Addr
> >
> >
> > Premkumar P wrote:
> > > hi,
> > >
> > > thankx for your help .. i will use the same in set function.
> > >
> > > I think a potential problem is that some functions,
> > such as the set
> > > function relied upon by the ctor modified below, are
> > intended to let the
> > > OS make the IPv4/IPv6 call if AF_UNSPEC is passed as
> > the address family.
> > > By using determine_type() to specify AF_INET or
> > AF_INET6, we might end
> > > up forcing something into an incorrect family. For
> > example, we are
> > > setting up an ACE_INET_Addr to contain the address of
> > an external host
> > > that really does not have IPv6, but with the local
> > configuration,
> > > determine_type() returns AF_INET6, then set() will fail
> > because the
> > > foreign address that should become IPv4 instead yields IPv6.
> > >
> > > cant really understand the problem you are talking about !
> > it would of
> > > great help if can 'expand it a bit'.
> > >
> >
> > OK. ACE_INET_Addr has several set() methods, at least one of
> > which takes
> > an optional address family parameter. The default value for this
> > parameter is AF_UNSPEC, meaning "I don't care what address family
> you
> > use." Passing either AF_INET or AF_INET6 means "use this
> > address family
> > or fail." Thus using determine_type() to select either AF_INET or
> > AF_INET6 may cause a failure where otherwise one might not happen.
> > Consider that you are on a host with IPv6 support enabled,
> > and you want
> > to create an ACE_INET_Addr (1234,"foo.bar.baz") where
> > foo.bar.baz is some
> > hostname. In your environment, foo.bar.baz resolves to only a
> > single IPv4
> > address. Using an address family of AF_UNSPEC, the set
> > (unsigned short,
> > char[],...) method will initialize the address with an IPv4
> > address. If
> > the address family is pre-determined to be AF_INET6, then the set
> > function will fail.
> >
> > > will there be any problem if i make this change in
> > ACE_INET_Addr::set
> > > function, if that is the case i have
> > > to look for a different solution, as it is critical "i
> > don't break" any
> > > functionality by making changes without understanding
> > > the effect of it !!!!
> > >
> >
> > Do this. Revert your change to INET_Addr.cpp and try this:
> > Index: INET_Addr.cpp
> >
===================================================================
> > --- INET_Addr.cpp (revision 79177)
> > +++ INET_Addr.cpp (working copy)
> > @@ -331,6 +331,10 @@
> > struct addrinfo *res = 0;
> > int error = 0;
> > ACE_OS::memset (&hints, 0, sizeof (hints));
> > +# if defined (ACE_USES_IPV4_IPV6_MIGRATION)
> > + if (address_family == AF_UNSPEC && !ACE::ipv6_enabled())
> > + address_family = AF_INET;
> > +# endif /* ACE_USES_IPV4_IPV6_MIGRATION */
> > if (address_family == AF_UNSPEC || address_family == AF_INET6)
> > {
> > hints.ai_family = AF_INET6;
> >
> > Let me know how this works.
> >
> > Now, can you answer a question for me? I am trying to figure
> > out how your
> > error condition arose in the first place. From what I understand,
> you
> > have an ACE library built with IPv6 support. This means that all
the
>
> > headers are available to define such things as AF_INET6,
> > sockaddr_in6,
> > etc. It also means that there is system library support for
> > calls such as
> > getaddrinfo() that can return IPv6 addresses. But when that
> > address is
> > supplied to the acceptor (used by the reactor notify pipe) it is
> only
> > then that it is rejected?
> >
> > That sounds like an even finer level of granularity than the
current
>
> > ACE_NAS_IPV6 allows. It sounds more like, there are IPv6
> > definitions, but
> > no runtime support. Ugh.
> >
> > --
> > Phil Mesnier
> > Principal Software Engineer, http://www.ociweb.com
> > Object Computing, Inc. +01.314.579.0066
> >
>
>
> _______________________________________________
> ace-users mailing list
> ace-users at mail.cse.wustl.edu
> http://mail.cse.wustl.edu/mailman/listinfo/ace-users
>
More information about the Ace-users
mailing list