diff --git a/src/net/AllocatedSocketAddress.hxx b/src/net/AllocatedSocketAddress.hxx
index f1475b969..a2ac7a471 100644
--- a/src/net/AllocatedSocketAddress.hxx
+++ b/src/net/AllocatedSocketAddress.hxx
@@ -1,8 +1,7 @@
 // SPDX-License-Identifier: BSD-2-Clause
 // author: Max Kellermann <max.kellermann@gmail.com>
 
-#ifndef ALLOCATED_SOCKET_ADDRESS_HXX
-#define ALLOCATED_SOCKET_ADDRESS_HXX
+#pragma once
 
 #include "SocketAddress.hxx" // IWYU pragma: export
 #include "Features.hxx"
@@ -117,6 +116,10 @@ public:
 		size = 0;
 	}
 
+	bool IsInet() const noexcept {
+		return GetFamily() == AF_INET || GetFamily() == AF_INET6;
+	}
+
 #ifdef HAVE_UN
 	/**
 	 * @see SocketAddress::GetLocalRaw()
@@ -191,5 +194,3 @@ public:
 private:
 	void SetSize(size_type new_size) noexcept;
 };
-
-#endif
diff --git a/src/net/SocketAddress.hxx b/src/net/SocketAddress.hxx
index 411872d97..36f2bbcbb 100644
--- a/src/net/SocketAddress.hxx
+++ b/src/net/SocketAddress.hxx
@@ -1,8 +1,7 @@
 // SPDX-License-Identifier: BSD-2-Clause
 // author: Max Kellermann <max.kellermann@gmail.com>
 
-#ifndef SOCKET_ADDRESS_HXX
-#define SOCKET_ADDRESS_HXX
+#pragma once
 
 #include "Features.hxx"
 
@@ -95,6 +94,10 @@ public:
 		return GetFamily() != AF_UNSPEC;
 	}
 
+	constexpr bool IsInet() const noexcept {
+		return GetFamily() == AF_INET || GetFamily() == AF_INET6;
+	}
+
 #ifdef HAVE_UN
 	/**
 	 * Extract the local socket path (which may begin with a null
@@ -135,10 +138,8 @@ public:
 	/**
 	 * Does the address family support port numbers?
 	 */
-	[[gnu::pure]]
-	bool HasPort() const noexcept {
-		return !IsNull() &&
-			(GetFamily() == AF_INET || GetFamily() == AF_INET6);
+	constexpr bool HasPort() const noexcept {
+		return !IsNull() && IsInet();
 	}
 
 	/**
@@ -173,5 +174,3 @@ public:
 		return !(*this == other);
 	}
 };
-
-#endif
diff --git a/src/net/StaticSocketAddress.hxx b/src/net/StaticSocketAddress.hxx
index a5f1ca17d..cb2118cff 100644
--- a/src/net/StaticSocketAddress.hxx
+++ b/src/net/StaticSocketAddress.hxx
@@ -91,6 +91,10 @@ public:
 		address.ss_family = AF_UNSPEC;
 	}
 
+	constexpr bool IsInet() const noexcept {
+		return GetFamily() == AF_INET || GetFamily() == AF_INET6;
+	}
+
 #ifdef HAVE_UN
 	/**
 	 * @see SocketAddress::GetLocalRaw()