Added non blocking obtain

multi_plaform
ambigipathyv ago%!(EXTRA string=1 year)
parent e26abf37ce
commit fd2ec05b86
  1. 2
      bakanet/src/bakanet/http/http_server.cpp
  2. 3
      bakanet/src/bakanet/sock_layer/socket.h
  3. 1
      bakanet/src/bakanetpch.h
  4. 24
      bakanet/src/platform/linux/linux_socket.cpp
  5. 2
      bakanet/src/platform/linux/linux_socket.h

@ -28,7 +28,7 @@ namespace Bk::Net {
bool reading = true;
while(reading)
{
auto data = socket->obtain(conn, 4);
auto data = socket->obtain(conn);
log("SIZE " << data.size())
reading = req.append_data(data);
}

@ -24,6 +24,8 @@ namespace Bk::Net {
virtual void emit(Connection socket, std::vector<char> packet) = 0;
virtual std::vector<char> obtain(int size) = 0;
virtual std::vector<char> obtain(Connection socket, int size) = 0;
virtual std::vector<char> obtain() = 0;
virtual std::vector<char> obtain(Connection socket) = 0;
template<typename T>
static bool set_option(Socket& socket, int level, int option_name, const T* option_value)
@ -32,6 +34,7 @@ namespace Bk::Net {
log(status)
return status == 0 ? true : false;
}
static std::unique_ptr<Socket> create(IpAddress ip, int port, IpProtocol proto);
};
}

@ -21,6 +21,7 @@
#include <tchar.h>
#pragma comment(lib,"WS2_32.lib")
#elif BK_PLAFORM_LINUX
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <sys/socket.h>

@ -86,6 +86,30 @@ namespace Bk::Net {
buffer.resize(read_size);
return buffer;
}
virtual std::vector<char> obtain()
{
std::vector<char> buffer(0);
int len = 0;
ioctl(sock, FIONREAD, &len);
if (len > 0) {
buffer.resize(len);
len = read(socket_id, buffer.data(), buffer.size() - 1);
}
return buffer;
}
virtual std::vector<char> obtain(Connection socket)
{
std::vector<char> buffer(0);
int len = 0;
ioctl(sock, FIONREAD, &len);
if (len > 0) {
buffer.resize(len);
len = read(conn, buffer.data(), buffer.size() - 1);
}
return buffer;
}
std::unique_ptr<Socket> Socket::create(IpAddress ip, int port, IpProtocol proto)
{

@ -20,6 +20,8 @@ namespace Bk::Net {
void emit(Connection socket, std::vector<char> packet) override;
std::vector<char> obtain(int size) override;
std::vector<char> obtain(Connection socket, int size) override;
std::vector<char> obtain() override;
std::vector<char> obtain(Connection socket) override;
private:
Connection socket_id;

Loading…
Cancel
Save