blob: 1bce0c437e10a253b70de6cf7e8f6662b6375e58 [file] [log] [blame]
#pragma once
#include <https/RunLoop.h>
#include <sys/socket.h>
struct BufferedSocket {
explicit BufferedSocket(std::shared_ptr<RunLoop> rl, int sock);
virtual ~BufferedSocket();
BufferedSocket(const BufferedSocket &) = delete;
BufferedSocket &operator=(const BufferedSocket &) = delete;
virtual void postRecv(RunLoop::AsyncFunction fn) = 0;
virtual void postSend(RunLoop::AsyncFunction fn) = 0;
ssize_t recv(void *data, size_t size) {
return recvfrom(data, size, nullptr, nullptr);
}
virtual ssize_t recvfrom(
void *data,
size_t size,
sockaddr *address,
socklen_t *addressLen) = 0;
ssize_t send(const void *data, size_t size) {
return sendto(data, size, nullptr, 0);
}
virtual ssize_t sendto(
const void *data,
size_t size,
const sockaddr *addr,
socklen_t addrLen) = 0;
virtual void postFlush(RunLoop::AsyncFunction fn) = 0;
int fd() const;
protected:
RunLoop *runLoop();
private:
std::shared_ptr<RunLoop> mRunLoop;
int mSock;
};