faio_posixio.hpp
00001 #line 4 "./lpsrc/flx_posixio.ipk"
00002 #ifndef __FLX_FAIO_POSIXIO_H__
00003 #define __FLX_FAIO_POSIXIO_H__
00004 #include <flx_faio_config.hpp>
00005
00006 #include "faio_asyncio.hpp"
00007
00008
00009
00010
00011
00012 #include "demux_posix_demuxer.hpp"
00013
00014
00015
00016 #include "demux_pfileio.hpp"
00017
00018 #include "demux_timer_queue.hpp"
00019
00020 namespace flx { namespace faio {
00021
00022 class FAIO_EXTERN socketio_wakeup : public demux::socket_wakeup {
00023 public:
00024 demux::sel_param pb;
00025 int sio_flags;
00026 struct socketio_request *request;
00027
00028 virtual void wakeup(demux::posix_demuxer& demux);
00029 };
00030
00031
00032
00033
00034
00035 class FAIO_EXTERN socketio_request : public flx_driver_request_base {
00036 public:
00037 socketio_wakeup sv;
00038 demux::posix_demuxer *pd;
00039 socketio_request() {}
00040 socketio_request(socketio_request const&);
00041 void operator = (socketio_request const&);
00042
00043 socketio_request(demux::posix_demuxer *pd_a, int s, char* buf, long len, bool r);
00044 bool start_async_op_impl();
00045 };
00046
00047
00048 class FAIO_EXTERN connect_request
00049 : public flx_driver_request_base, public demux::connect_control_block {
00050 public:
00051 demux::posix_demuxer *pd;
00052 connect_request() {}
00053
00054 connect_request(demux::posix_demuxer *pd_a,const char* addr, int port);
00055 bool start_async_op_impl();
00056 virtual void wakeup(demux::posix_demuxer&);
00057 };
00058
00059
00060 class FAIO_EXTERN accept_request
00061 : public flx_driver_request_base, public demux::accept_control_block {
00062 public:
00063
00064
00065
00066
00067 demux::posix_demuxer *pd;
00068 accept_request() {}
00069
00070
00071 accept_request(demux::posix_demuxer *pd_a, int listener) : pd(pd_a) { s = listener; }
00072
00073
00074 bool start_async_op_impl();
00075
00076
00077 virtual void wakeup(demux::posix_demuxer& demux);
00078 };
00079
00080
00081
00082
00083 class FAIO_EXTERN flxfileio_request
00084 : public flx_driver_request_base, public demux::fileio_request
00085 {
00086 pthread::worker_fifo *aio_worker;
00087 public:
00088 flxfileio_request();
00089 ~flxfileio_request();
00090
00091 flxfileio_request(
00092 pthread::worker_fifo *a,
00093 int f, char* buf, long len, long off, bool rd
00094 )
00095 : fileio_request(f, buf, len, off, rd), aio_worker(a)
00096 {
00097
00098 }
00099
00100
00101 bool start_async_op_impl();
00102 void finished();
00103 };
00104
00105 }}
00106 #endif
00107