Archived
1
0

abstract out epoll and make room for kqueue

This commit is contained in:
Jeff Becker
2018-05-04 08:17:49 -04:00
parent b227bf6ff1
commit 7ccd554c2d
8 changed files with 252 additions and 225 deletions

View File

@@ -31,24 +31,21 @@ namespace ev
virtual bool acceptable() const { return false; };
virtual int accept() { return -1; };
};
struct Loop
{
public:
virtual ~Loop() {};
virtual bool BindTCP(const sockaddr * addr, ev::io * handler) = 0;
virtual bool TrackConn(ev::io * handler) = 0;
virtual void UntrackConn(ev::io * handler) = 0;
virtual void Run() = 0;
};
}
class Mainloop
{
public:
Mainloop();
~Mainloop();
ev::Loop * NewMainLoop();
bool BindTCP(const sockaddr * addr, ev::io * handler);
bool TrackConn(ev::io * handler);
void UntrackConn(ev::io * handler);
void Run();
private:
size_t conns;
int epollfd;
char readbuf[128];
};
}
#endif

View File

@@ -11,7 +11,7 @@ namespace nntpchan
class NNTPServer : public Server
{
public:
NNTPServer(Mainloop & loop);
NNTPServer(ev::Loop * loop);
virtual ~NNTPServer();

View File

@@ -59,7 +59,7 @@ private:
class Server : public ev::io
{
public:
Server(Mainloop & loop);
Server(ev::Loop * loop);
virtual ~Server() {};
virtual bool acceptable() const { return true; };
@@ -91,7 +91,7 @@ protected:
private:
void OnAccept(int fd, int status);
Mainloop & m_Loop;
ev::Loop * m_Loop;
std::deque<IServerConn *> m_conns;
};
}