Hi,

>>>>> On Tue, 3 May 2005 18:39:10 +0300
>>>>> Sergey <[EMAIL PROTECTED]> said:

fenix>        //get local address - local address is 192.168.0.250
fenix>        if ((gaierr = getaddrinfo(argv[1], argv[2], &hints, &localaddr)) 
!= 0)
fenix>            errx(1, "%s port %s: %s", argv[1], argv[2], 
gai_strerror(gaierr));

You need to initialize hints before calling getaddrinfo(3).

fenix>       inet_ntop(la->ai_family, la->ai_addr->sa_data, buf, sizeof(struct 
sockaddr));

The usage of inet_ntop(3) is wrong.

It should be something like:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#include <err.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    struct addrinfo hints, *la, *localaddr;
    char buf[46];
    int gaierr=0;

    //get local address - local address is 192.168.0.250
    bzero(&hints, sizeof(hints));
    hints.ai_flags = AI_PASSIVE;
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    if ((gaierr = getaddrinfo(argv[1], argv[2], &hints, &localaddr)) != 0)
        errx(1, "%s port %s: %s", argv[1], argv[2], gai_strerror(gaierr));

    for (la = localaddr; la; la = la->ai_next)
    {
        switch (la->ai_family) {
        case AF_INET:
            inet_ntop(la->ai_family,
                      &((struct sockaddr_in *)la->ai_addr)->sin_addr,
                      buf, sizeof(buf));
            break;
        case AF_INET6:
            inet_ntop(la->ai_family,
                      &((struct sockaddr_in6 *)la->ai_addr)->sin6_addr,
                      buf, sizeof(buf));
            break;
        default:
           continue;
        }
        fprintf(stderr, "Address: %s\n", buf);
    }

    return 0;
}

You can use getnameinfo(3) to simplify usage of inet_ntop(3).

Sincerely,

--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
[EMAIL PROTECTED]  [EMAIL PROTECTED],jp.}FreeBSD.org
http://www.imasy.org/~ume/
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to