From 0acfd8bd56e639841a46166ef0d158d564af9489 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 18 Jan 2024 10:44:01 -0500 Subject: [PATCH] MT#55283 add IPv4 fallback Try open an IPv4 socket if IPv6 fails with EAFNOSUPPORT in order to support kernels without IPv6 support. closes #1784 Change-Id: I2cf4065450a8b19b738c572e7d9ad6f8548ecc04 --- lib/socket.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/socket.c b/lib/socket.c index 4f0d17401..8c4b14326 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -800,15 +800,19 @@ fail: } int open_v46_socket(socket_t *r, int type) { - sockfamily_t *fam = &__socket_families[SF_IP6]; - - if (__socket(r, type, fam)) { - __C_DBG("open socket fail, fd=%d", r->fd); - return -1; + int ret = __socket(r, type, &__socket_families[SF_IP6]); + if (ret) { + if (errno == EAFNOSUPPORT) + ret = __socket(r, type, &__socket_families[SF_IP4]); + if (ret) { + __C_DBG("open socket fail"); + return -1; + } } + else + ipv6only(r->fd, 0); nonblock(r->fd); - ipv6only(r->fd, 0); return 0; }