summaryrefslogtreecommitdiff
path: root/src/server/server.cpp
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-06-19 18:45:34 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-06-19 18:45:34 +0800
commitcad2569f10e6c0131e5e645ee76330c776b91547 (patch)
treef246b6a9799644c735228c6c5df2ece65e0d028d /src/server/server.cpp
parentb3a3e73aaefa39e052e53f9f42c6d0e2f7e1bb9b (diff)
fix!: share pointer
for details: https://stackoverflow.com/a/5548314
Diffstat (limited to 'src/server/server.cpp')
-rw-r--r--src/server/server.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/server/server.cpp b/src/server/server.cpp
index 5f10ac6..63ada20 100644
--- a/src/server/server.cpp
+++ b/src/server/server.cpp
@@ -8,6 +8,9 @@
using namespace LibSock::Server;
+namespace LibSock {
+namespace Server {
+
Server::Server(uint16_t port, bool reuseaddr, bool keepalive)
: m_sockfd(
std::make_shared<LibSock::CFileDescriptor>(socket(AF_INET, SOCK_STREAM, 0))
@@ -36,10 +39,28 @@ Server::Server(uint16_t port, bool reuseaddr, bool keepalive)
if (bind(m_sockfd->get(), reinterpret_cast<sockaddr *>(&m_addr), sizeof(m_addr)) ||
listen(m_sockfd->get(), 5))
throw std::runtime_error("server:server Failed to bind or listen on socket");
+}
+
+SP<Server> Server::create(uint16_t port, bool reuseaddr, bool keepalive) {
+ if (pServer)
+ throw std::runtime_error("server:server Server already exist");
+ pServer = SP<Server>(new Server(port, reuseaddr, keepalive));
+ return pServer;
+}
+
+SP<Server> Server::get() {
+ if (!pServer)
+ pServer = shared_from_this();
+ return pServer;
+}
- pServer = SP<Server>(this);
-};
+Server::~Server() {
+ m_sockfd.reset();
+}
-Server::~Server() { m_sockfd.reset(); }
+SP<LibSock::CFileDescriptor> Server::getSocket() const {
+ return m_sockfd;
+}
-std::shared_ptr<LibSock::CFileDescriptor> Server::getSocket() const { return m_sockfd; }
+} // namespace Server
+} // namespace LibSock