Hi!

On Jan 29, 2008, at 11:54 PM, Tomash Brechko wrote:

That's exactly the point.  The user have the control with the -l
option.  And if I specify some name, I expect it to be resolved to all
addresses (for one address I would simply specify it as is).  I doubt
Drepper's paper is wrong with this respect.  Also, with IPv6 a single

Drepper's paper is not wrong, it just does not think through the actions of poor DNS entries.

One thought I had this morning was perhaps toss an error if ai->next shows that there are multiple binding addresses.

AI_ADDRCONFIG is required to skip the addresses when they are reported
by DNS but the host doesn't bind them to any interface.  As for the
rest, I didn't mean you should combine UPD and TCP.  What I mean is
that there's no point to disable IPv6 for UDP as you did, and no point
to explicitly specify IPPROTO_* along with SOCK_*.

OSX 10.5 has issues with IPv6 and binding for UDP right now, which is why I left it that way (but then 10.5).

I've never found an authoritative that says you can get away with just setting IPPROT and not SOCK (or vice versa).

It should be

    if (error != 0) {
        if (error != EAI_SYSTEM)
            fprintf(stderr, "getaddrinfo(): %s\n",
gai_strerror(error));
        else
            perror("getaddrinfo()");

        return -1;
    }

All errors returned by getaddrinfo() are handled by gai_strerror().
Running perror in the way you suggest above will get you a haphazard
message of "SUCCESS" from perror(). Just let the error fall to
gai_strerror().

"SUCCESS" can't be ever reported, the code above runs perror() only
when getaddrinfo() returns EAI_SYSTEM.  gai_strerror(EAI_SYSTEM) will
return "System error", while perror() will be more specific.  Here's
what man page says:

      EAI_SYSTEM
             Other system error, check errno for details.

And the code above "checks" errno with perror().

Ok, extra error information can not hurt (though I suspect some systems will report SUCCESS via this).

You have lots of premature returns where you better to do
freeaddrinfo() too, just for the case ;).


That is how the program is structured. Look at how the other exit
points are done.

Exactly because of this.  On other exit points the code is careful to
close the socket, so you should do your cleanup as well.


Ok.

Cheers,
        -Brian

--
_______________________________________________________
Brian "Krow" Aker, brian at tangent.org
Seattle, Washington
http://krow.net/                     <-- Me
http://tangent.org/                <-- Software
http://exploitseattle.com/    <-- Fun
_______________________________________________________
You can't grep a dead tree.


Reply via email to