This Proactor makes use of Asynchronous I/O Control Blocks
(AIOCB) to notify/get the completion status of the aio_
operations issued.
#include <ace/POSIX_Proactor.h>
class ACE_POSIX_AIOCB_Proactor : public ACE_POSIX_Proactor {
public:
friend class ACE_AIOCB_Notify_Pipe_Manager;
friend class ACE_POSIX_AIOCB_Asynch_Operation;
ACE_POSIX_AIOCB_Proactor (void);
virtual ~ACE_POSIX_AIOCB_Proactor (void);
virtual int handle_events (ACE_Time_Value &wait_time);
virtual int handle_events (void);
virtual int post_completion (ACE_POSIX_Asynch_Result *result);
virtual ACE_Asynch_Read_Stream_Impl *create_asynch_read_stream ( void );
virtual ACE_Asynch_Write_Stream_Impl *create_asynch_write_stream ( void );
virtual ACE_Asynch_Read_File_Impl *create_asynch_read_file (void);
virtual ACE_Asynch_Write_File_Impl *create_asynch_write_file ( void );
virtual ACE_Asynch_Accept_Impl *create_asynch_accept (void);
virtual ACE_Asynch_Transmit_File_Impl *create_asynch_transmit_file ( void );
protected:
virtual int handle_events (unsigned long milli_seconds);
void application_specific_code ( ACE_POSIX_Asynch_Result *asynch_result, u_long bytes_transferred, int success, const void *completion_key, u_long error );
int register_aio_with_proactor (ACE_POSIX_Asynch_Result *result);
ACE_AIOCB_Notify_Pipe_Manager* aiocb_notify_pipe_manager_;
aiocb *aiocb_list_ [ACE_RTSIG_MAX];
ACE_POSIX_Asynch_Result *result_list_ [ACE_RTSIG_MAX];
size_t aiocb_list_max_size_;
size_t aiocb_list_cur_size_;
};
virtual ACE_Asynch_Read_Stream_Impl *create_asynch_read_stream (void);
virtual ACE_Asynch_Write_Stream_Impl *create_asynch_write_stream (
void
);
virtual ACE_Asynch_Read_File_Impl *create_asynch_read_file (void);
virtual ACE_Asynch_Write_File_Impl *create_asynch_write_file (void);
virtual ACE_Asynch_Accept_Impl *create_asynch_accept (void);
virtual ACE_Asynch_Transmit_File_Impl *create_asynch_transmit_file (
void
);
irfan@cs.wustl.edu
,
Tim Harrison harrison@cs.wustl.edu
and
Alexander Babu Arulanthu alex@cs.wustl.edu