diff --git a/src/network_manager_main.cpp b/src/network_manager_main.cpp
index 802b7d6..b72e32d 100644
--- a/src/network_manager_main.cpp
+++ b/src/network_manager_main.cpp
@@ -265,19 +265,6 @@
 } // namespace network
 } // namespace phosphor
 
-void createNetLinkSocket(phosphor::Descriptor& smartSock)
-{
-    // RtnetLink socket
-    auto fd = socket(PF_NETLINK, SOCK_RAW | SOCK_NONBLOCK, NETLINK_ROUTE);
-    if (fd < 0)
-    {
-        log<level::ERR>("Unable to create the net link socket",
-                        entry("ERRNO=%d", errno));
-        elog<InternalFailure>();
-    }
-    smartSock.set(fd);
-}
-
 int main(int /*argc*/, char** /*argv*/)
 {
     phosphor::network::initializeTimers();
@@ -315,12 +302,8 @@
         phosphor::network::manager->reloadConfigs();
     }
 
-    // RtnetLink socket
-    phosphor::Descriptor smartSock;
-    createNetLinkSocket(smartSock);
-
     // RTNETLINK event handler
-    phosphor::network::rtnetlink::Server svr(eventPtr, smartSock);
+    phosphor::network::rtnetlink::Server svr(eventPtr);
 
 #ifdef SYNC_MAC_FROM_INVENTORY
     std::ifstream in(configFile);
diff --git a/src/rtnetlink_server.cpp b/src/rtnetlink_server.cpp
index b7b7cb3..3722a67 100644
--- a/src/rtnetlink_server.cpp
+++ b/src/rtnetlink_server.cpp
@@ -1,19 +1,15 @@
 #include "rtnetlink_server.hpp"
 
-#include "types.hpp"
-#include "util.hpp"
-
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
-#include <net/if.h>
 #include <netinet/in.h>
-#include <sys/types.h>
-#include <systemd/sd-daemon.h>
-#include <unistd.h>
 
 #include <memory>
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
+#include <stdplus/fd/create.hpp>
+#include <stdplus/fd/ops.hpp>
+#include <stdplus/signal.hpp>
 #include <string_view>
 #include <xyz/openbmc_project/Common/error.hpp>
 
@@ -96,64 +92,49 @@
     return 0;
 }
 
-Server::Server(EventPtr& eventPtr, const phosphor::Descriptor& smartSock)
+static stdplus::ManagedFd makeSock()
+{
+    using namespace stdplus::fd;
+
+    auto sock = socket(SocketDomain::Netlink, SocketType::Raw,
+                       static_cast<stdplus::fd::SocketProto>(NETLINK_ROUTE));
+
+    sock.fcntlSetfl(sock.fcntlGetfl().set(FileFlag::NonBlock));
+
+    sockaddr_nl local{};
+    local.nl_family = AF_NETLINK;
+    local.nl_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR |
+                      RTMGRP_IPV4_ROUTE | RTMGRP_IPV6_ROUTE | RTMGRP_NEIGH;
+    bind(sock, local);
+
+    return sock;
+}
+
+Server::Server(EventPtr& eventPtr) : sock(makeSock())
 {
     using namespace phosphor::logging;
     using InternalFailure =
         sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
-    struct sockaddr_nl addr
-    {
-    };
     int r{};
 
-    sigset_t ss{};
-    // check that the given socket is valid or not.
-    if (smartSock() < 0)
-    {
-        r = -EBADF;
-        goto finish;
-    }
-
-    if (sigemptyset(&ss) < 0 || sigaddset(&ss, SIGTERM) < 0 ||
-        sigaddset(&ss, SIGINT) < 0)
-    {
-        r = -errno;
-        goto finish;
-    }
-    /* Block SIGTERM first, so that the event loop can handle it */
-    if (sigprocmask(SIG_BLOCK, &ss, NULL) < 0)
-    {
-        r = -errno;
-        goto finish;
-    }
-
     /* Let's make use of the default handler and "floating"
        reference features of sd_event_add_signal() */
 
+    stdplus::signal::block(SIGTERM);
     r = sd_event_add_signal(eventPtr.get(), NULL, SIGTERM, NULL, NULL);
     if (r < 0)
     {
         goto finish;
     }
 
+    stdplus::signal::block(SIGINT);
     r = sd_event_add_signal(eventPtr.get(), NULL, SIGINT, NULL, NULL);
     if (r < 0)
     {
         goto finish;
     }
 
-    std::memset(&addr, 0, sizeof(addr));
-    addr.nl_family = AF_NETLINK;
-    addr.nl_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR |
-                     RTMGRP_IPV4_ROUTE | RTMGRP_IPV6_ROUTE | RTMGRP_NEIGH;
-
-    if (bind(smartSock(), (struct sockaddr*)&addr, sizeof(addr)) < 0)
-    {
-        r = -errno;
-        goto finish;
-    }
-
-    r = sd_event_add_io(eventPtr.get(), nullptr, smartSock(), EPOLLIN,
+    r = sd_event_add_io(eventPtr.get(), nullptr, sock.get(), EPOLLIN,
                         eventHandler, nullptr);
     if (r < 0)
     {
diff --git a/src/rtnetlink_server.hpp b/src/rtnetlink_server.hpp
index e62f51c..aca3744 100644
--- a/src/rtnetlink_server.hpp
+++ b/src/rtnetlink_server.hpp
@@ -1,9 +1,8 @@
 #pragma once
 
 #include "types.hpp"
-#include "util.hpp"
 
-#include <systemd/sd-event.h>
+#include <stdplus/fd/managed.hpp>
 
 namespace phosphor
 {
@@ -31,14 +30,16 @@
      *  @param[in] eventPtr - Unique ptr reference to sd_event.
      *  @param[in] socket - netlink socket.
      */
-    Server(EventPtr& eventPtr, const phosphor::Descriptor& socket);
+    Server(EventPtr& eventPtr);
 
-    Server() = delete;
-    ~Server() = default;
-    Server(const Server&) = delete;
-    Server& operator=(const Server&) = delete;
-    Server(Server&&) = default;
-    Server& operator=(Server&&) = default;
+    /** @brief Gets the socket associated with this netlink server */
+    inline stdplus::Fd& getSock()
+    {
+        return sock;
+    }
+
+  private:
+    stdplus::ManagedFd sock;
 };
 
 } // namespace rtnetlink
diff --git a/test/test_rtnetlink.cpp b/test/test_rtnetlink.cpp
index 98d8db3..21aaca3 100644
--- a/test/test_rtnetlink.cpp
+++ b/test/test_rtnetlink.cpp
@@ -28,7 +28,7 @@
 {
 
   public:
-    phosphor::Descriptor smartSock;
+    std::optional<rtnetlink::Server> svr;
 
     TestRtNetlink()
     {
@@ -41,8 +41,9 @@
         initializeTimers();
         createNetLinkSocket();
         bus.attach_event(eventPtr.get(), SD_EVENT_PRIORITY_NORMAL);
-        rtnetlink::Server svr(eventPtr, smartSock);
+        svr.emplace(eventPtr);
     }
+
     void createNetLinkSocket()
     {
         // RtnetLink socket
@@ -72,7 +73,7 @@
 
     EXPECT_EQ(false, manager->hasInterface("igb5"));
     // Send the request
-    send(smartSock(), nlMsg, nlMsg->nlmsg_len, 0);
+    send(svr->getSock(), nlMsg, nlMsg->nlmsg_len, 0);
 
     int i = 3;
     while (i--)
