From: Alexander Scherbatiy <alexander.scherbatiy@bell-sw.com>
To: musl@lists.openwall.com
Subject: [musl] getaddrinfo(3) with AI_V4MAPPED and AI_ALL flags
Date: Thu, 27 Feb 2020 13:17:20 +0300 [thread overview]
Message-ID: <89b25567-5887-80ee-bfac-58b25e7a9b45@bell-sw.com> (raw)
Hello,
When I call getaddrinfo() with different families, SOCK_STREAM socktype,
IPPROTO_TCP protocol, and AI_PASSIVE flag the result is the same on the
Alpine Linux 3.11.3 and Ubuntu 19.10 (the code sample is below):
----------------
family: AF_UNSPEC, flags: AI_PASSIVE
AF_INET IPv4 addr '0.0.0.0'
AF_INET6 IPv6 addr '::'
family: AF_INET, flags: AI_PASSIVE
AF_INET IPv4 addr '0.0.0.0'
family: AF_INET6, flags: AI_PASSIVE
AF_INET6 IPv6 addr '::'
----------------
When I use getaddrinfo() with AF_INET6 family and additional AI_V4MAPPED
| AI_ALL (return both IPv6 and IPv4-mapped IPv6 addresses) flags the
result on Ubuntu contains only IPv6 '::' address:
----------------
family: AF_INET6, flags: AI_PASSIVE | AI_V4MAPPED | AI_ALL
AF_INET6 IPv6 addr '::'
----------------
whereas the result on Alpine Linux contains both IPv4-mapped IPv6
addresses '::ffff:0.0.0.0' and IPv6 '::'
----------------
family: AF_INET6, flags: AI_PASSIVE | AI_V4MAPPED | AI_ALL
AF_INET6 IPv6 addr '::ffff:0.0.0.0'
AF_INET6 IPv6 addr '::'
----------------
Is it expected behavior?
I use Alpine Linux 3.11.3 from docker with musl libc (x86_64).
Thanks,
Alexander.
Code sample:
------------- addr_info.c -----------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <arpa/inet.h>
void sockaddr_show(struct sockaddr *sa) {
int family = sa->sa_family;
if (family == AF_INET) {
char buff[INET_ADDRSTRLEN];
struct sockaddr_in server_addr = *((struct sockaddr_in*) sa);
inet_ntop(AF_INET, &server_addr.sin_addr, buff, INET_ADDRSTRLEN);
printf("AF_INET IPv4 addr '%s'\n", buff);
} else if (family == AF_INET6) {
char buff[INET_ADDRSTRLEN];
struct sockaddr_in6 server_addr = *((struct sockaddr_in6*) sa);
inet_ntop(AF_INET6, &server_addr.sin6_addr, buff,
INET6_ADDRSTRLEN);
printf("AF_INET6 IPv6 addr '%s'\n", buff);
} else {
printf("family: %d\n", family);
}
}
void show_addr_info(int family, int flags) {
char* hostname = NULL;
char* service = "33833";
struct addrinfo hints;
struct addrinfo *result, *rp;
memset (&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = flags;
int res = getaddrinfo(hostname, service, &hints, &result);
for (rp = result; rp != NULL; rp = rp->ai_next) {
sockaddr_show(rp->ai_addr);
}
printf("\n");
}
int main(void) {
printf("family: AF_UNSPEC, flags: AI_PASSIVE\n");
show_addr_info(AF_UNSPEC, AI_PASSIVE);
printf("family: AF_INET, flags: AI_PASSIVE\n");
show_addr_info(AF_INET, AI_PASSIVE);
printf("family: AF_INET6, flags: AI_PASSIVE\n");
show_addr_info(AF_INET6, AI_PASSIVE);
printf("family: AF_INET6, flags: AI_PASSIVE | AI_V4MAPPED |
AI_ALL\n");
show_addr_info(AF_INET6, AI_PASSIVE | AI_V4MAPPED | AI_ALL);
return EXIT_SUCCESS;
}
--------------------------------
next reply other threads:[~2020-02-27 10:17 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-27 10:17 Alexander Scherbatiy [this message]
2020-02-27 14:45 ` Rich Felker
2020-07-30 15:20 ` Alexander Scherbatiy
2020-07-30 16:00 ` Rich Felker
2020-07-31 16:21 ` Dmitry Samersoff
2020-07-31 19:19 ` Rich Felker
2020-08-03 8:15 ` Dmitry Samersoff
2020-08-03 13:37 ` Rich Felker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=89b25567-5887-80ee-bfac-58b25e7a9b45@bell-sw.com \
--to=alexander.scherbatiy@bell-sw.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).