diff --git a/bakanet/src/bakanet/sock_layer/socket.h b/bakanet/src/bakanet/sock_layer/socket.h index 5eaf870..bb39f65 100755 --- a/bakanet/src/bakanet/sock_layer/socket.h +++ b/bakanet/src/bakanet/sock_layer/socket.h @@ -18,18 +18,17 @@ namespace Bk::Net { virtual std::unique_ptr ack() = 0; virtual bool conn() = 0; + virtual int get_raw_socket() = 0; + virtual const std::string get_ip() = 0; virtual void emit(std::vector packet) = 0; - virtual void emit(Connection socket, std::vector packet) = 0; virtual std::vector obtain(int size) = 0; - virtual std::vector obtain(Connection conn, int size) = 0; template static bool set_option(Socket& socket, int level, int option_name, const T* option_value) { return setsockopt(socket.get_raw_socket(), level, option_name, (void*)option_value, sizeof(T)) == 0 ? true : false; } static std::unique_ptr create(IpAddress ip, int port, IpProtocol proto); - private: static std::unique_ptr create(int id, IpVersion ver, IpProtocol proto); }; } \ No newline at end of file diff --git a/bakanet/src/platform/windows/windows_socket.cpp b/bakanet/src/platform/windows/windows_socket.cpp index 6f0e9f5..5bfa755 100755 --- a/bakanet/src/platform/windows/windows_socket.cpp +++ b/bakanet/src/platform/windows/windows_socket.cpp @@ -7,12 +7,11 @@ namespace Bk::Net { WindowsSocket::WindowsSocket(int id, IpVersion ver, IpProtocol proto) : id(id), ip_proto(proto), main(false) { - char myIP[16]; - struct sockaddr sock_addr; - getsockname(id, (struct sockaddr*)&addr, sizeof(addr)); - inet_ntop((int)ver, &addr.sin_addr, myIP, sizeof(myIP)); + 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); - addr = sock_addr; } WindowsSocket::WindowsSocket(IpAddress ip, int port, IpProtocol proto) @@ -38,10 +37,9 @@ namespace Bk::Net { log("socket failed " << WSAGetLastError()); exit(EXIT_FAILURE); } - struct sockaddr_in in_addr; - in_addr.sin_addr = ip_addr.get_data(); - in_addr.sin_family = (int)ip_addr.version; - in_addr.sin_port = htons(port); + addr.sin_addr = ip_addr.get_data(); + addr.sin_family = (int)ip_addr.version; + addr.sin_port = htons(port); } WindowsSocket::~WindowsSocket() @@ -69,10 +67,10 @@ namespace Bk::Net { return true; } - Connection WindowsSocket::ack() + std::unique_ptr WindowsSocket::ack() { socklen_t addrlen = sizeof(addr); - return accept(id, (struct sockaddr*)&addr, &addrlen); + return Socket::create(accept(id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto); } bool WindowsSocket::conn() @@ -102,6 +100,6 @@ namespace Bk::Net { std::unique_ptr Socket::create(int id, IpVersion ver, IpProtocol proto) { - return std::unique_ptr(new WindowsSocket(int id, IpVersion ver, IpProtocol proto)); + return std::unique_ptr(new WindowsSocket(id, ver, proto)); } } \ No newline at end of file diff --git a/bakanet/src/platform/windows/windows_socket.h b/bakanet/src/platform/windows/windows_socket.h index d1fc644..d6ef96a 100755 --- a/bakanet/src/platform/windows/windows_socket.h +++ b/bakanet/src/platform/windows/windows_socket.h @@ -14,17 +14,18 @@ namespace Bk::Net { bool init() override; bool start(int cpt_conn) override; - Connection ack() override; + std::unique_ptr ack() override; bool conn() override; int get_raw_socket() override { return id; } + const std::string get_ip() override { return ip_addr.str; } void emit(std::vector packet) override; std::vector obtain(int size) override; private: Connection id; - struct sockaddr addr; + struct sockaddr_in addr; IpAddress ip_addr; IpProtocol ip_proto; bool main;