Hello, I'm playing around with IPv6 code on a FreeBSD 9 system and can't get getaddrinfo(3C) to do what it should do as stated in its man page: accept an IPv6 and IPv4 IP addr, it only works with the IPv6 form:
$ ./a.out ::1 host: ::1 read: SSH-2.0-OpenSSH_5.6p1 FreeBSD-20101111 $ ./a.out 127.0.0.1 host: 127.0.0.1 ssh: getaddrinfo failed code 8: hostname nor servname provided, or not known $ telnet 127.0.0.1 22 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SSH-2.0-OpenSSH_5.6p1 FreeBSD-20101111 the used C-code is attached below; what I'm doing wrong in the code? Thanks matthias /* IPv6 client code using getaddrinfo */ #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <netdb.h> #include <string.h> main(argc, argv) /* client side */ int argc; char *argv[]; { struct addrinfo req, *ans; int code, s, n; char buf[1024]; memset(&req, 0, sizeof(req)); req.ai_flags = AI_ADDRCONFIG|AI_NUMERICHOST; req.ai_family = AF_INET6; /* Same as AF_INET6. */ req.ai_socktype = SOCK_STREAM; /* */ /* Use default protocol (in this case tcp) */ /* */ req.ai_protocol = 0; printf("host: %s\n", argv[1]); if ((code = getaddrinfo(argv[1], "ssh", &req, &ans)) != 0) { fprintf(stderr, "ssh: getaddrinfo failed code %d: %s\n", code, gai_strerror(code)); exit(1); } /* */ /* ans must contain at least one addrinfo, use */ /* the first. */ /* */ s = socket(ans->ai_family, ans->ai_socktype, ans->ai_protocol); if (s < 0) { perror("ssh: socket"); exit(3); } /* Connect does the bind for us */ if (connect(s, ans->ai_addr, ans->ai_addrlen) < 0) { perror("ssh: connect"); exit(5); } n = read(s, buf, 1024); printf ("read: %s", buf); /* */ /* Free answers after use */ /* */ freeaddrinfo(ans); exit(0); } -- Matthias Apitz e <g...@unixarea.de> - w http://www.unixarea.de/ UNIX since V7 on PDP-11, UNIX on mainframe since ESER 1055 (IBM /370) UNIX on x86 since SVR4.2 UnixWare 2.1.2, FreeBSD since 2.2.5 _______________________________________________ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"