diff --git a/Userland/Libraries/LibCore/Socket.cpp b/Userland/Libraries/LibCore/Socket.cpp index c6be2ad77c..dfc400322f 100644 --- a/Userland/Libraries/LibCore/Socket.cpp +++ b/Userland/Libraries/LibCore/Socket.cpp @@ -370,6 +370,9 @@ ErrorOr LocalSocket::peer_pid() const #elif defined(AK_OS_NETBSD) struct sockcred creds = {}; socklen_t creds_size = sizeof(creds); +#elif defined(AK_OS_SOLARIS) + ucred_t* creds = NULL; + socklen_t creds_size = sizeof(creds); #else struct ucred creds = {}; socklen_t creds_size = sizeof(creds); @@ -384,6 +387,9 @@ ErrorOr LocalSocket::peer_pid() const #elif defined(AK_OS_NETBSD) TRY(System::getsockopt(m_helper.fd(), SOL_SOCKET, SCM_CREDS, &creds, &creds_size)); return creds.sc_pid; +#elif defined(AK_OS_SOLARIS) + TRY(System::getsockopt(m_helper.fd(), SOL_SOCKET, SO_RECVUCRED, &creds, &creds_size)); + return ucred_getpid(creds); #else TRY(System::getsockopt(m_helper.fd(), SOL_SOCKET, SO_PEERCRED, &creds, &creds_size)); return creds.pid; diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index ea00998ac7..785ea92e9c 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -37,6 +37,7 @@ #ifdef AK_OS_SOLARIS # include +# include #endif namespace Core::System {