summaryrefslogtreecommitdiff
path: root/louloulibs/network/tcp_server_socket.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'louloulibs/network/tcp_server_socket.hpp')
-rw-r--r--louloulibs/network/tcp_server_socket.hpp70
1 files changed, 0 insertions, 70 deletions
diff --git a/louloulibs/network/tcp_server_socket.hpp b/louloulibs/network/tcp_server_socket.hpp
deleted file mode 100644
index c511962..0000000
--- a/louloulibs/network/tcp_server_socket.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-#pragma once
-
-#include <network/socket_handler.hpp>
-#include <network/poller.hpp>
-#include <logger/logger.hpp>
-
-#include <string>
-
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/ip.h>
-
-#include <cstring>
-#include <cassert>
-
-template <typename RemoteSocketType>
-class TcpSocketServer: public SocketHandler
-{
- public:
- TcpSocketServer(std::shared_ptr<Poller>& poller, const uint16_t port):
- SocketHandler(poller, -1)
- {
- if ((this->socket = ::socket(AF_INET6, SOCK_STREAM, 0)) == -1)
- throw std::runtime_error(std::string{"Could not create socket: "} + std::strerror(errno));
-
- int opt = 1;
- if (::setsockopt(this->socket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1)
- throw std::runtime_error(std::string{"Failed to set socket option: "} + std::strerror(errno));
-
- struct sockaddr_in6 addr{};
- addr.sin6_family = AF_INET6;
- addr.sin6_port = htons(port);
- addr.sin6_addr = IN6ADDR_ANY_INIT;
- if ((::bind(this->socket, (const struct sockaddr*)&addr, sizeof(addr))) == -1)
- { // If we can’t listen on this port, we just give up, but this is not fatal.
- log_warning("Failed to bind on port ", std::to_string(port), ": ", std::strerror(errno));
- return;
- }
-
- if ((::listen(this->socket, 10)) == -1)
- throw std::runtime_error("listen() failed");
-
- this->accept();
- }
- ~TcpSocketServer() = default;
-
- void on_recv() override
- {
- // Accept a RemoteSocketType
- int socket = ::accept(this->socket, nullptr, nullptr);
-
- auto client = std::make_unique<RemoteSocketType>(poller, socket, *this);
- this->poller->add_socket_handler(client.get());
- this->sockets.push_back(std::move(client));
- }
-
- protected:
- std::vector<std::unique_ptr<RemoteSocketType>> sockets;
-
- private:
- void accept()
- {
- this->poller->add_socket_handler(this);
- }
- bool is_connected() const override
- {
- return true;
- }
-};