diff --git a/src/bakanet/core/socket.h b/src/bakanet/core/socket.h index 49953c4..4220376 100755 --- a/src/bakanet/core/socket.h +++ b/src/bakanet/core/socket.h @@ -18,8 +18,6 @@ namespace Bk::Net { virtual bool start(int cpt_conn) = 0; virtual Socket* ack() = 0; virtual bool conn() = 0; - virtual bool hasConnection(int seconds = 0, int microseconds = 0) = 0; - virtual int get_raw_socket() = 0; virtual const std::string get_ip() = 0; diff --git a/src/bakanet/http/server.cpp b/src/bakanet/http/server.cpp index a5c5cfc..01549f8 100755 --- a/src/bakanet/http/server.cpp +++ b/src/bakanet/http/server.cpp @@ -23,8 +23,8 @@ namespace Bk::Net { route_request(conn, recv_request(conn)); delete conn; }); - pool.stop(); } + pool.stop(); } void HttpServer::get(std::string url, RequestHandler req_handler) @@ -32,7 +32,7 @@ namespace Bk::Net { RadixTree* tree; Tools::string_trim(url, " /"); auto splits = Tools::string_split(url, "/"); - if (tree = radix.get_node(splits->data(), splits->size())) tree->value["GET"] = req_handler; + if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["GET"] = req_handler; else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "GET", req_handler }})); } @@ -41,7 +41,7 @@ namespace Bk::Net { RadixTree* tree; Tools::string_trim(url, " /"); auto splits = Tools::string_split(url, "/"); - if (tree = radix.get_node(splits->data(), splits->size())) tree->value["POST"] = req_handler; + if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["POST"] = req_handler; else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "POST", req_handler }})); } @@ -50,7 +50,7 @@ namespace Bk::Net { RadixTree* tree; Tools::string_trim(url, " /"); auto splits = Tools::string_split(url, "/"); - if (tree = radix.get_node(splits->data(), splits->size())) tree->value["DELETE"] = req_handler; + if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["DELETE"] = req_handler; else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "DELETE", req_handler }})); } @@ -59,7 +59,7 @@ namespace Bk::Net { RadixTree* tree; Tools::string_trim(url, " /"); auto splits = Tools::string_split(url, "/"); - if (tree = radix.get_node(splits->data(), splits->size())) tree->value["PUT"] = req_handler; + if ((tree = radix.get_node(splits->data(), splits->size()))) tree->value["PUT"] = req_handler; else radix.add_nodes(splits->data(), splits->size(), HttpMethodArray({{ "PUT", req_handler }})); } diff --git a/src/platform/linux/linux_socket.cpp b/src/platform/linux/linux_socket.cpp index f5da455..22042ec 100755 --- a/src/platform/linux/linux_socket.cpp +++ b/src/platform/linux/linux_socket.cpp @@ -1,14 +1,14 @@ #include "linux_socket.h" +#include +#include namespace Bk::Net { - LinuxSocket::LinuxSocket(int id, IpVersion ver, IpProtocol proto) - : id(id), ip_proto(proto) + LinuxSocket::LinuxSocket(int id, struct sockaddr_in client_addr, IpVersion ver, IpProtocol proto) + : id(id), ip_proto(proto), addr(client_addr) { - char myIP[16] = " "; - socklen_t len = sizeof(addr); - getsockname(id, (struct sockaddr*)&addr, &len); - inet_ntop((int)ver, &addr, myIP, sizeof(myIP)); - ip_addr = IpAddress(std::string(myIP, 16), ver); + + char* myIP = inet_ntoa(addr.sin_addr); + ip_addr = IpAddress(std::string(myIP), ver); } LinuxSocket::LinuxSocket(IpAddress ip, int port, IpProtocol proto) @@ -55,8 +55,9 @@ namespace Bk::Net { Socket* LinuxSocket::ack() { - socklen_t addrlen = sizeof(addr); - return new LinuxSocket(accept(id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto); + struct sockaddr_in client_addr; + socklen_t addrlen = sizeof(client_addr); + return new LinuxSocket(accept(id, (struct sockaddr*)&client_addr, &addrlen), client_addr, ip_addr.version, ip_proto); } bool LinuxSocket::conn() @@ -69,14 +70,6 @@ namespace Bk::Net { return true; } - bool LinuxSocket::hasConnection(int seconds, int microseconds) { - struct timeval tv = { seconds, microseconds }; - fd_set rfds; - FD_ZERO(&rfds); - FD_SET(id, &rfds); - return select(id + 1, &rfds, (fd_set*)0, (fd_set*)0, &tv) > 0; - }; - void LinuxSocket::emit(std::vector packet) { write(id, packet.data(), packet.size()); @@ -95,9 +88,4 @@ namespace Bk::Net { { return new LinuxSocket(ip, port, proto); } - - Socket* Socket::create(int id, IpVersion ver, IpProtocol proto) - { - return new LinuxSocket(id, ver, proto); - } } \ No newline at end of file diff --git a/src/platform/linux/linux_socket.h b/src/platform/linux/linux_socket.h index 287ea0c..0903779 100755 --- a/src/platform/linux/linux_socket.h +++ b/src/platform/linux/linux_socket.h @@ -8,7 +8,7 @@ namespace Bk::Net { { public: LinuxSocket(IpAddress ip, int port, IpProtocol proto); - LinuxSocket(int id, IpVersion ver, IpProtocol proto); + LinuxSocket(int id, struct sockaddr_in client_addr, IpVersion ver, IpProtocol proto); virtual ~LinuxSocket(); bool init() override; @@ -16,8 +16,6 @@ namespace Bk::Net { Socket* ack() override; bool conn() override; - bool hasConnection(int seconds = 0, int microseconds = 0) override; - int get_raw_socket() override { return id; } const std::string get_ip() override { return ip_addr.str; } diff --git a/src/platform/windows/windows_socket.cpp b/src/platform/windows/windows_socket.cpp index 1927c51..777f394 100755 --- a/src/platform/windows/windows_socket.cpp +++ b/src/platform/windows/windows_socket.cpp @@ -69,7 +69,7 @@ namespace Bk::Net { Socket* WindowsSocket::ack() { socklen_t addrlen = sizeof(addr); - return WindowsSocket(accept((SOCKET)id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto)); + return new WindowsSocket(accept((SOCKET)id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto)); } bool WindowsSocket::conn() @@ -104,9 +104,4 @@ namespace Bk::Net { { return new WindowsSocket(ip, port, proto); } - - Socket* Socket::create(int id, IpVersion ver, IpProtocol proto) - { - return new WindowsSocket(id, ver, proto); - } } \ No newline at end of file