net/SocketDescriptor: add Duplicate() method

The the Duplicate() method we inherited from class FileDescriptor
returns a UniqueFileDescriptor, but we really want to return a
UniqueSocketDescriptor.
This commit is contained in:
Max Kellermann 2024-08-02 16:52:17 +02:00 committed by Max Kellermann
parent dbb2b29271
commit 314667259e
3 changed files with 16 additions and 2 deletions

View File

@ -6,6 +6,7 @@
#include "StaticSocketAddress.hxx" #include "StaticSocketAddress.hxx"
#include "IPv4Address.hxx" #include "IPv4Address.hxx"
#include "IPv6Address.hxx" #include "IPv6Address.hxx"
#include "UniqueSocketDescriptor.hxx"
#ifdef _WIN32 #ifdef _WIN32
#include <ws2tcpip.h> #include <ws2tcpip.h>
@ -243,7 +244,15 @@ SocketDescriptor::SetNonBlocking() const noexcept
return ioctlsocket(fd, FIONBIO, &val) == 0; return ioctlsocket(fd, FIONBIO, &val) == 0;
} }
#endif #else
UniqueSocketDescriptor
SocketDescriptor::Duplicate() const noexcept
{
return UniqueSocketDescriptor{FileDescriptor::Duplicate()};
}
#endif // !_WIN32
bool bool
SocketDescriptor::SetOption(int level, int name, SocketDescriptor::SetOption(int level, int name,

View File

@ -24,6 +24,7 @@ class SocketAddress;
class StaticSocketAddress; class StaticSocketAddress;
class IPv4Address; class IPv4Address;
class IPv6Address; class IPv6Address;
class UniqueSocketDescriptor;
/** /**
* An OO wrapper for a Berkeley or WinSock socket descriptor. * An OO wrapper for a Berkeley or WinSock socket descriptor.
@ -137,7 +138,10 @@ public:
using FileDescriptor::SetNonBlocking; using FileDescriptor::SetNonBlocking;
using FileDescriptor::SetBlocking; using FileDescriptor::SetBlocking;
using FileDescriptor::Duplicate;
[[nodiscard]]
UniqueSocketDescriptor Duplicate() const noexcept;
using FileDescriptor::CheckDuplicate; using FileDescriptor::CheckDuplicate;
using FileDescriptor::Close; using FileDescriptor::Close;
#else #else

View File

@ -62,5 +62,6 @@ net_dep = declare_dependency(
link_with: net, link_with: net,
dependencies: [ dependencies: [
system_dep, system_dep,
io_dep,
], ],
) )