demux_epoll_demuxer.hpp

00001 #line 3 "./lpsrc/flx_epoll_demux.ipk"
00002 #ifndef __FLX_DEMUX_EPOLL_DEMUXER_H__
00003 #define __FLX_DEMUX_EPOLL_DEMUXER_H__
00004 
00005 #include <flx_demux_config.hpp>
00006 #include "demux_posix_demuxer.hpp"
00007 
00008 namespace flx { namespace demux {
00009 // epoll allows only one event per socket - it does not differentiate
00010 // on the awaited operation (read/write), however it does let you wait
00011 // on any combination (I think)
00012 
00013 // ********************************************************
00014 /// epoll based demuxer
00015 // ********************************************************
00016 
00017 class DEMUX_EXTERN epoll_demuxer : public posix_demuxer {
00018   int   epoll_fd;
00019 
00020   // be careful of this - don't let it create race conditions
00021   // should probably only be called by wait = in one thread only (check)
00022   // this removes ALL outstanding events for s.
00023   void  remove_wakeup(int s);
00024 
00025   virtual void  get_evts(bool poll);
00026 public:
00027   epoll_demuxer();
00028   virtual ~epoll_demuxer();
00029 
00030   virtual int   add_socket_wakeup(socket_wakeup* sv, int flags);
00031 };
00032 
00033 }} // namespace demux, flx
00034 #endif
00035 

Generated on Fri Jun 8 03:04:30 2007 for Felix by  doxygen 1.5.2