laforge has submitted this change. (
https://gerrit.osmocom.org/c/libosmocore/+/37874?usp=email )
Change subject: core/socket.c: Fix socket binding on IPv4-only hosts
......................................................................
core/socket.c: Fix socket binding on IPv4-only hosts
Let's avoid attempting to use IPv6 addresses on hosts that do not
have IPv6 capability.
Change-Id: I5690a25af98089e3a8a092cb91dfc969720abdc0
Closes: SYS#7047
---
M src/core/socket.c
1 file changed, 24 insertions(+), 1 deletion(-)
Approvals:
Jenkins Builder: Verified
Hoernchen: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
diff --git a/src/core/socket.c b/src/core/socket.c
index e394cf9..da20981 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -278,6 +278,24 @@
return 0;
}
+/*! Determine if the system supports AF_INET6 sockets at all.
+ * We call socket(AF_INET6) once and cache the result value. */
+static bool system_supports_inet6(void)
+{
+ static int cached_val = -1;
+
+ if (cached_val < 0) {
+ int rc = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
+ if (rc < 0 && errno == EAFNOSUPPORT) {
+ cached_val = 0;
+ } else {
+ cached_val = 1;
+ close(rc);
+ }
+ }
+ return cached_val == 1;
+}
+
/*! Initialize a socket (including bind and/or connect)
* \param[in] family Address Family like AF_INET, AF_INET6, AF_UNSPEC
* \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM
@@ -343,7 +361,12 @@
/* It must do a full run to ensure AF_UNSPEC does not fail.
* In case first local valid entry is IPv4 and only remote valid entry
* is IPv6 or vice versa */
- if (family == AF_UNSPEC) {
+ if (!system_supports_inet6()) {
+ /* if no AF_INET6 is supported, then the decision is easy...*/
+ local_ipv4 = true;
+ remote_ipv4 = true;
+ family = AF_INET;
+ } else if (family == AF_UNSPEC) {
for (rp = local; rp != NULL; rp = rp->ai_next) {
switch (rp->ai_family) {
case AF_INET:
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/37874?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I5690a25af98089e3a8a092cb91dfc969720abdc0
Gerrit-Change-Number: 37874
Gerrit-PatchSet: 5
Gerrit-Owner: laforge <[email protected]>
Gerrit-Reviewer: Hoernchen <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>