Обсуждение: Re: freeaddrinfo2 changes.

Поиск
Список
Период
Сортировка

Re: freeaddrinfo2 changes.

От
Tom Lane
Дата:
Kurt Roeckx <Q@ping.be> writes:
> I just saw in the cvs web that you changed freeaddrinfo2 to not
> have the hint af anymore, and use the one from the struct addrinfo
> itself.

> This can break things.  If you called getaddrinfo2() with
> AF_UNSPEC, the version from the system can return an AF_UNIX
> socket.  For instance glibc 2.1 will do that.

If this is broken then it's probably not the only problem --- we rely on
sa.sa_family in other places.
        regards, tom lane


Re: freeaddrinfo2 changes.

От
Kurt Roeckx
Дата:
On Mon, Jun 09, 2003 at 10:09:20AM -0400, Tom Lane wrote:
> Kurt Roeckx <Q@ping.be> writes:
> > I just saw in the cvs web that you changed freeaddrinfo2 to not
> > have the hint af anymore, and use the one from the struct addrinfo
> > itself.
> 
> > This can break things.  If you called getaddrinfo2() with
> > AF_UNSPEC, the version from the system can return an AF_UNIX
> > socket.  For instance glibc 2.1 will do that.
> 
> If this is broken then it's probably not the only problem --- we rely on
> sa.sa_family in other places.

sa.sa_family is not the problem itself, the problem is that if
you use getaddrinfo with AF_UNSPEC, you can get more than replies
with more than 1 address family. You will get atleast AF_INET,
AF_INET6 if they exist for what you request, and maybe AF_UNIX or
even others.



Kurt



Re: freeaddrinfo2 changes.

От
Tom Lane
Дата:
Kurt Roeckx <Q@ping.be> writes:
>> If this is broken then it's probably not the only problem --- we rely on
>> sa.sa_family in other places.

> sa.sa_family is not the problem itself, the problem is that if
> you use getaddrinfo with AF_UNSPEC, you can get more than replies
> with more than 1 address family. You will get atleast AF_INET,
> AF_INET6 if they exist for what you request, and maybe AF_UNIX or
> even others.

Oh, I see --- the problem is to tell the difference between an AF_UNIX
addrinfo built by getaddrinfo_unix and one returned by the system's
getaddrinfo.  Okay.
        regards, tom lane