anulax1225 ago%!(EXTRA string=2 months)
parent 0cf7329899
commit 856273e78f
  1. 22
      src/platform/linux/linux_socket.cpp
  2. 4
      src/platform/linux/linux_socket.h
  3. 2
      src/platform/windows/windows_socket.cpp

@ -27,7 +27,7 @@ namespace Bk::Net {
LinuxSocket::~LinuxSocket()
{
close(id);
if(id > 0) close(id);
}
bool LinuxSocket::init()
@ -53,10 +53,10 @@ namespace Bk::Net {
return true;
}
std::unique_ptr<Socket> LinuxSocket::ack()
Socket* LinuxSocket::ack()
{
socklen_t addrlen = sizeof(addr);
return std::unique_ptr<Socket>(Socket::create(accept(id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto));
return new LinuxSocket(accept(id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto);
}
bool LinuxSocket::conn()
@ -69,6 +69,14 @@ 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<char> packet)
{
write(id, packet.data(), packet.size());
@ -83,13 +91,13 @@ namespace Bk::Net {
return buffer;
}
std::unique_ptr<Socket> Socket::create(IpAddress ip, int port, IpProtocol proto)
Socket* Socket::create(IpAddress ip, int port, IpProtocol proto)
{
return std::unique_ptr<Socket>(new LinuxSocket(ip, port, proto));
return new LinuxSocket(ip, port, proto);
}
std::unique_ptr<Socket> Socket::create(int id, IpVersion ver, IpProtocol proto)
Socket* Socket::create(int id, IpVersion ver, IpProtocol proto)
{
return std::unique_ptr<Socket>(new LinuxSocket(id, ver, proto));
return new LinuxSocket(id, ver, proto);
}
}

@ -13,9 +13,11 @@ namespace Bk::Net {
bool init() override;
bool start(int cpt_conn) override;
std::unique_ptr<Socket> ack() override;
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; }

@ -69,7 +69,7 @@ namespace Bk::Net {
Socket* WindowsSocket::ack()
{
socklen_t addrlen = sizeof(addr);
return Socket::create(accept((SOCKET)id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto);
return WindowsSocket(accept((SOCKET)id, (struct sockaddr*)&addr, &addrlen), ip_addr.version, ip_proto));
}
bool WindowsSocket::conn()

Loading…
Cancel
Save