00001 #line 3 "./lpsrc/flx_select_demux.ipk"
00002 #ifndef __FLX_DEMUX_SELECT_DEMUXER_H__
00003 #define __FLX_DEMUX_SELECT_DEMUXER_H__
00004
00005 #include "demux_posix_demuxer.hpp"
00006 #include <sys/types.h>
00007 #include <sys/select.h>
00008 #include <sys/time.h>
00009 #include <unistd.h>
00010
00011
00012
00013
00014
00015 namespace flx { namespace demux {
00016
00017 class DEMUX_EXTERN select_demuxer : public posix_demuxer {
00018 void remove_fd(int s);
00019
00020
00021 fd_set master_read_set;
00022 fd_set master_write_set;
00023 fd_set master_except_set;
00024
00025
00026
00027
00028 socket_wakeup* svs[FD_SETSIZE];
00029
00030
00031 int fdmax;
00032
00033 protected:
00034 virtual void get_evts(bool poll);
00035
00036 public:
00037
00038 void copy_sets(fd_set& rset, fd_set& wset, fd_set& exset);
00039
00040 bool select(fd_set& rset, fd_set& wset, fd_set& exset, bool poll);
00041
00042 void process_sets(fd_set& rset, fd_set& wset, fd_set& exset);
00043
00044 select_demuxer();
00045
00046 virtual int add_socket_wakeup(socket_wakeup* sv, int flags);
00047 };
00048 }}
00049 #endif
00050