net/SocketDescriptor: add GetPeerPidfd()
This commit is contained in:
parent
78e643150f
commit
88fa68f030
@ -8,6 +8,10 @@
|
||||
#include "IPv6Address.hxx"
|
||||
#include "UniqueSocketDescriptor.hxx"
|
||||
|
||||
#ifdef __linux__
|
||||
#include "io/UniqueFileDescriptor.hxx"
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <ws2tcpip.h>
|
||||
#else
|
||||
@ -235,6 +239,24 @@ SocketDescriptor::GetPeerCredentials() const noexcept
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
|
||||
#ifndef SO_PEERPIDFD
|
||||
#define SO_PEERPIDFD 77
|
||||
#endif
|
||||
|
||||
UniqueFileDescriptor
|
||||
SocketDescriptor::GetPeerPidfd() const noexcept
|
||||
{
|
||||
int pidfd;
|
||||
if (GetOption(SOL_SOCKET, SO_PEERPIDFD, &pidfd, sizeof(pidfd)) < sizeof(pidfd))
|
||||
return {};
|
||||
|
||||
return UniqueFileDescriptor{pidfd};
|
||||
}
|
||||
|
||||
#endif // __linux__
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
bool
|
||||
|
@ -25,6 +25,7 @@ class StaticSocketAddress;
|
||||
class IPv4Address;
|
||||
class IPv6Address;
|
||||
class UniqueSocketDescriptor;
|
||||
class UniqueFileDescriptor;
|
||||
|
||||
/**
|
||||
* An OO wrapper for a Berkeley or WinSock socket descriptor.
|
||||
@ -229,6 +230,16 @@ public:
|
||||
struct ucred GetPeerCredentials() const noexcept;
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
/**
|
||||
* Get a pidfd for the peer process. Returns an undefined
|
||||
* instance on error (with errno set).
|
||||
*
|
||||
* Requires Linux 6.5.
|
||||
*/
|
||||
UniqueFileDescriptor GetPeerPidfd() const noexcept;
|
||||
#endif // __linux__
|
||||
|
||||
bool SetOption(int level, int name,
|
||||
const void *value, std::size_t size) const noexcept;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user