diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-07-17 20:37:29 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-07-17 20:37:29 +0100 |
commit | 45499a8e8fb73c414df663a125a96901a4d00e2e (patch) | |
tree | 2e2a946807c943fe0d0dbc045c648f8d070b8a00 /icespider/embedded/embedded.h | |
parent | WIP (diff) | |
download | icespider-45499a8e8fb73c414df663a125a96901a4d00e2e.tar.bz2 icespider-45499a8e8fb73c414df663a125a96901a4d00e2e.tar.xz icespider-45499a8e8fb73c414df663a125a96901a4d00e2e.zip |
Replace select with epoll
Remove the clunky and fiddly select(2) implementation with a much
slicker and good god faster epoll(7) based one.
Diffstat (limited to 'icespider/embedded/embedded.h')
-rw-r--r-- | icespider/embedded/embedded.h | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/icespider/embedded/embedded.h b/icespider/embedded/embedded.h index 7d7fafa..0e1055a 100644 --- a/icespider/embedded/embedded.h +++ b/icespider/embedded/embedded.h @@ -5,15 +5,11 @@ #include <memory> #include <array> #include <vector> -#include </usr/include/semaphore.h> -#include <blockingconcurrentqueue.h> #include "socketHandler.h" namespace IceSpider::Embedded { class DLL_PUBLIC Listener { public: - typedef moodycamel::BlockingConcurrentQueue<SocketHandler::Work> WorkQueue; - Listener(); Listener(unsigned short portno); ~Listener(); @@ -26,23 +22,19 @@ namespace IceSpider::Embedded { template<typename T, typename ... P> inline int create(const P & ... p) { auto s = std::make_unique<T>(p...); - topSock = std::max(s->fd + 1, topSock); + sockCount++; return (sockets[s->fd] = std::move(s))->fd; } - WorkQueue work; + void add(int fd, int flags); + void rearm(int fd, int flags); + void remove(int fd); private: - inline void add(int fd); - inline void remove(int fd); - - void worker(); - typedef std::unique_ptr<SocketHandler> SocketPtr; typedef std::array<SocketPtr, 1024> Sockets; - int topSock; + int sockCount, epollfd; Sockets sockets; - fd_set rfds, wfds, efds; }; }; |