|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|
} |