Modified Connections to be litteral sockets

multi_plaform
ambigipathyv ago%!(EXTRA string=1 year)
parent 200e7958bb
commit c5dfce8c15
  1. 5
      bakanet/src/bakanet/sock_layer/socket.h
  2. 22
      bakanet/src/platform/windows/windows_socket.cpp
  3. 5
      bakanet/src/platform/windows/windows_socket.h

@ -18,18 +18,17 @@ namespace Bk::Net {
virtual std::unique_ptr<Socket> ack() = 0; virtual std::unique_ptr<Socket> ack() = 0;
virtual bool conn() = 0; virtual bool conn() = 0;
virtual int get_raw_socket() = 0; virtual int get_raw_socket() = 0;
virtual const std::string get_ip() = 0;
virtual void emit(std::vector<char> packet) = 0; virtual void emit(std::vector<char> packet) = 0;
virtual void emit(Connection socket, std::vector<char> packet) = 0;
virtual std::vector<char> obtain(int size) = 0; virtual std::vector<char> obtain(int size) = 0;
virtual std::vector<char> obtain(Connection conn, int size) = 0;
template<typename T> template<typename T>
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 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<Socket> create(IpAddress ip, int port, IpProtocol proto); static std::unique_ptr<Socket> create(IpAddress ip, int port, IpProtocol proto);
private:
static std::unique_ptr<Socket> create(int id, IpVersion ver, IpProtocol proto); static std::unique_ptr<Socket> create(int id, IpVersion ver, IpProtocol proto);
}; };
} }

@ -7,12 +7,11 @@ namespace Bk::Net {
WindowsSocket::WindowsSocket(int id, IpVersion ver, IpProtocol proto) WindowsSocket::WindowsSocket(int id, IpVersion ver, IpProtocol proto)
: id(id), ip_proto(proto), main(false) : id(id), ip_proto(proto), main(false)
{ {
char myIP[16]; char myIP[16] = " ";
struct sockaddr sock_addr; socklen_t len = sizeof(addr);
getsockname(id, (struct sockaddr*)&addr, sizeof(addr)); getsockname(id, (struct sockaddr*)&addr, &len);
inet_ntop((int)ver, &addr.sin_addr, myIP, sizeof(myIP)); inet_ntop((int)ver, &addr, myIP, sizeof(myIP));
ip_addr = IpAddress(std::string(myIP, 16), ver); ip_addr = IpAddress(std::string(myIP, 16), ver);
addr = sock_addr;
} }
WindowsSocket::WindowsSocket(IpAddress ip, int port, IpProtocol proto) WindowsSocket::WindowsSocket(IpAddress ip, int port, IpProtocol proto)
@ -38,10 +37,9 @@ namespace Bk::Net {
log("socket failed " << WSAGetLastError()); log("socket failed " << WSAGetLastError());
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
struct sockaddr_in in_addr; addr.sin_addr = ip_addr.get_data();
in_addr.sin_addr = ip_addr.get_data(); addr.sin_family = (int)ip_addr.version;
in_addr.sin_family = (int)ip_addr.version; addr.sin_port = htons(port);
in_addr.sin_port = htons(port);
} }
WindowsSocket::~WindowsSocket() WindowsSocket::~WindowsSocket()
@ -69,10 +67,10 @@ namespace Bk::Net {
return true; return true;
} }
Connection WindowsSocket::ack() std::unique_ptr<Socket> WindowsSocket::ack()
{ {
socklen_t addrlen = sizeof(addr); 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() bool WindowsSocket::conn()
@ -102,6 +100,6 @@ namespace Bk::Net {
std::unique_ptr<Socket> Socket::create(int id, IpVersion ver, IpProtocol proto) std::unique_ptr<Socket> Socket::create(int id, IpVersion ver, IpProtocol proto)
{ {
return std::unique_ptr<Socket>(new WindowsSocket(int id, IpVersion ver, IpProtocol proto)); return std::unique_ptr<Socket>(new WindowsSocket(id, ver, proto));
} }
} }

@ -14,17 +14,18 @@ namespace Bk::Net {
bool init() override; bool init() override;
bool start(int cpt_conn) override; bool start(int cpt_conn) override;
Connection ack() override; std::unique_ptr<Socket> ack() override;
bool conn() override; bool conn() override;
int get_raw_socket() override { return id; } int get_raw_socket() override { return id; }
const std::string get_ip() override { return ip_addr.str; }
void emit(std::vector<char> packet) override; void emit(std::vector<char> packet) override;
std::vector<char> obtain(int size) override; std::vector<char> obtain(int size) override;
private: private:
Connection id; Connection id;
struct sockaddr addr; struct sockaddr_in addr;
IpAddress ip_addr; IpAddress ip_addr;
IpProtocol ip_proto; IpProtocol ip_proto;
bool main; bool main;

Loading…
Cancel
Save