diff --git a/src/Listen.cxx b/src/Listen.cxx
index 296aa67e4..95e0862f7 100644
--- a/src/Listen.cxx
+++ b/src/Listen.cxx
@@ -49,7 +49,7 @@ listen_systemd_activation(ClientListener &listener)
 
 	for (int i = SD_LISTEN_FDS_START, end = SD_LISTEN_FDS_START + n;
 	     i != end; ++i)
-		listener.AddFD(UniqueSocketDescriptor(i));
+		listener.AddFD(UniqueSocketDescriptor{AdoptTag{}, i});
 
 	return true;
 }
diff --git a/src/event/ServerSocket.cxx b/src/event/ServerSocket.cxx
index 274d1f3c0..107141857 100644
--- a/src/event/ServerSocket.cxx
+++ b/src/event/ServerSocket.cxx
@@ -130,7 +130,7 @@ inline void
 ServerSocket::OneServerSocket::Accept() noexcept
 {
 	StaticSocketAddress peer_address;
-	UniqueSocketDescriptor peer_fd(event.GetSocket().AcceptNonBlock(peer_address));
+	UniqueSocketDescriptor peer_fd{AdoptTag{}, event.GetSocket().AcceptNonBlock(peer_address)};
 	if (!peer_fd.IsDefined()) {
 		const SocketErrorMessage msg;
 		FmtError(server_socket_domain,
diff --git a/src/net/UniqueSocketDescriptor.hxx b/src/net/UniqueSocketDescriptor.hxx
index c74548736..70bf45834 100644
--- a/src/net/UniqueSocketDescriptor.hxx
+++ b/src/net/UniqueSocketDescriptor.hxx
@@ -4,6 +4,7 @@
 #pragma once
 
 #include "SocketDescriptor.hxx"
+#include "util/TagStructs.hxx"
 
 #ifndef _WIN32
 #include "io/UniqueFileDescriptor.hxx"
@@ -21,17 +22,17 @@ public:
 	UniqueSocketDescriptor() noexcept
 		:SocketDescriptor(SocketDescriptor::Undefined()) {}
 
-	explicit UniqueSocketDescriptor(SocketDescriptor _fd) noexcept
+	explicit UniqueSocketDescriptor(AdoptTag, SocketDescriptor _fd) noexcept
 		:SocketDescriptor(_fd) {}
 #ifndef _WIN32
-	explicit UniqueSocketDescriptor(FileDescriptor _fd) noexcept
+	explicit UniqueSocketDescriptor(AdoptTag, FileDescriptor _fd) noexcept
 		:SocketDescriptor(_fd) {}
 
 	explicit UniqueSocketDescriptor(UniqueFileDescriptor &&_fd) noexcept
 		:SocketDescriptor(_fd.Release()) {}
 #endif // !_WIN32
 
-	explicit UniqueSocketDescriptor(int _fd) noexcept
+	explicit UniqueSocketDescriptor(AdoptTag, int _fd) noexcept
 		:SocketDescriptor(_fd) {}
 
 #ifdef _WIN32
@@ -75,14 +76,14 @@ public:
 	 * @return an "undefined" instance on error
 	 */
 	UniqueSocketDescriptor AcceptNonBlock() const noexcept {
-		return UniqueSocketDescriptor(SocketDescriptor::AcceptNonBlock());
+		return UniqueSocketDescriptor{AdoptTag{}, SocketDescriptor::AcceptNonBlock()};
 	}
 
 	/**
 	 * @return an "undefined" instance on error
 	 */
 	UniqueSocketDescriptor AcceptNonBlock(StaticSocketAddress &address) const noexcept {
-		return UniqueSocketDescriptor(SocketDescriptor::AcceptNonBlock(address));
+		return UniqueSocketDescriptor{AdoptTag{}, SocketDescriptor::AcceptNonBlock(address)};
 	}
 
 #ifndef _WIN32