ACE
6.1.5
|
This Proactor makes use of Asynchronous I/O Control Blocks (AIOCB) to notify/get the completion status of the <aio_> operations issued. More...
#include <POSIX_Proactor.h>
Public Member Functions | |
ACE_POSIX_AIOCB_Proactor (size_t nmaxop=ACE_AIO_DEFAULT_SIZE) | |
virtual Proactor_Type | get_impl_type (void) |
virtual | ~ACE_POSIX_AIOCB_Proactor (void) |
Destructor. | |
virtual int | close (void) |
Close down the Proactor. | |
virtual int | handle_events (ACE_Time_Value &wait_time) |
virtual int | handle_events (void) |
virtual int | post_completion (ACE_POSIX_Asynch_Result *result) |
Post a result to the completion port of the Proactor. | |
virtual int | start_aio (ACE_POSIX_Asynch_Result *result, ACE_POSIX_Proactor::Opcode op) |
virtual int | cancel_aio (ACE_HANDLE h) |
![]() | |
virtual | ~ACE_POSIX_Proactor (void) |
Virtual destructor. | |
ACE_Asynch_Pseudo_Task & | get_asynch_pseudo_task () |
Task to process pseudo-asynchronous operations. | |
virtual int | register_handle (ACE_HANDLE handle, const void *completion_key) |
This function is a no-op function for Unix systems. Returns 0. | |
int | wake_up_dispatch_threads (void) |
@ This is a no-op on POSIX platforms. Returns 0. | |
int | close_dispatch_threads (int wait) |
@ This is a no-op on POSIX platforms. Returns 0. | |
size_t | number_of_threads (void) const |
@ This is a no-op on POSIX platforms. Returns 0. | |
void | number_of_threads (size_t threads) |
Set number of thread used as a parameter to CreatIoCompletionPort. | |
virtual ACE_HANDLE | get_handle (void) const |
This is a no-op in POSIX. Returns ACE_INVALID_HANDLE. | |
virtual ACE_Asynch_Read_Stream_Impl * | create_asynch_read_stream (void) |
Create the correct implementation class for doing Asynch_Read_Stream. | |
virtual ACE_Asynch_Read_Stream_Result_Impl * | create_asynch_read_stream_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE handle, ACE_Message_Block &message_block, size_t bytes_to_read, const void *act, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Read_Stream::Result class. | |
virtual ACE_Asynch_Write_Stream_Impl * | create_asynch_write_stream (void) |
Create the correct implementation class for doing Asynch_Write_Stream. | |
virtual ACE_Asynch_Write_Stream_Result_Impl * | create_asynch_write_stream_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE handle, ACE_Message_Block &message_block, size_t bytes_to_write, const void *act, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Write_Stream::Result. | |
virtual ACE_Asynch_Read_File_Impl * | create_asynch_read_file (void) |
Create the correct implementation class for doing Asynch_Read_File. | |
virtual ACE_Asynch_Read_File_Result_Impl * | create_asynch_read_file_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE handle, ACE_Message_Block &message_block, size_t bytes_to_read, const void *act, u_long offset, u_long offset_high, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Read_File::Result. | |
virtual ACE_Asynch_Write_File_Impl * | create_asynch_write_file (void) |
Create the correct implementation class for doing Asynch_Write_File. | |
virtual ACE_Asynch_Write_File_Result_Impl * | create_asynch_write_file_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE handle, ACE_Message_Block &message_block, size_t bytes_to_write, const void *act, u_long offset, u_long offset_high, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Write_File::Result. | |
virtual ACE_Asynch_Read_Dgram_Impl * | create_asynch_read_dgram (void) |
virtual ACE_Asynch_Read_Dgram_Result_Impl * | create_asynch_read_dgram_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE handle, ACE_Message_Block *message_block, size_t bytes_to_read, int flags, int protocol_family, const void *act, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Read_Dgram::Result. | |
virtual ACE_Asynch_Write_Dgram_Impl * | create_asynch_write_dgram (void) |
virtual ACE_Asynch_Write_Dgram_Result_Impl * | create_asynch_write_dgram_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE handle, ACE_Message_Block *message_block, size_t bytes_to_write, int flags, const void *act, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Write_Dgram::Result. | |
virtual ACE_Asynch_Accept_Impl * | create_asynch_accept (void) |
Create the correct implementation class for doing Asynch_Accept. | |
virtual ACE_Asynch_Accept_Result_Impl * | create_asynch_accept_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE listen_handle, ACE_HANDLE accept_handle, ACE_Message_Block &message_block, size_t bytes_to_read, const void *act, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Accept::Result. | |
virtual ACE_Asynch_Connect_Impl * | create_asynch_connect (void) |
Create the correct implementation class for doing Asynch_Connect. | |
virtual ACE_Asynch_Connect_Result_Impl * | create_asynch_connect_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE connect_handle, const void *act, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Connect::Result. | |
virtual ACE_Asynch_Transmit_File_Impl * | create_asynch_transmit_file (void) |
Create the correct implementation class for doing Asynch_Transmit_File. | |
virtual ACE_Asynch_Transmit_File_Result_Impl * | create_asynch_transmit_file_result (const ACE_Handler::Proxy_Ptr &handler_proxy, ACE_HANDLE socket, ACE_HANDLE file, ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer, size_t bytes_to_write, u_long offset, u_long offset_high, size_t bytes_per_send, u_long flags, const void *act, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
Create the correct implementation class for ACE_Asynch_Transmit_File::Result. | |
virtual ACE_Asynch_Result_Impl * | create_asynch_timer (const ACE_Handler::Proxy_Ptr &handler_proxy, const void *act, const ACE_Time_Value &tv, ACE_HANDLE event=ACE_INVALID_HANDLE, int priority=0, int signal_number=ACE_SIGRTMIN) |
![]() | |
virtual | ~ACE_Proactor_Impl (void) |
Virtual destruction. | |
![]() | |
virtual | ~ACE_Event_Handler (void) |
Destructor is virtual to enable proper cleanup. | |
virtual void | set_handle (ACE_HANDLE) |
Set the I/O handle. | |
virtual int | priority (void) const |
virtual void | priority (int priority) |
Set the priority of the Event_Handler. | |
virtual int | handle_input (ACE_HANDLE fd=ACE_INVALID_HANDLE) |
Called when input events occur (e.g., connection or data). | |
virtual int | handle_output (ACE_HANDLE fd=ACE_INVALID_HANDLE) |
virtual int | handle_exception (ACE_HANDLE fd=ACE_INVALID_HANDLE) |
Called when an exceptional events occur (e.g., SIGURG). | |
virtual int | handle_timeout (const ACE_Time_Value ¤t_time, const void *act=0) |
virtual int | handle_exit (ACE_Process *) |
Called when a process exits. | |
virtual int | handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask) |
virtual int | handle_signal (int signum, siginfo_t *=0, ucontext_t *=0) |
virtual int | resume_handler (void) |
virtual int | handle_qos (ACE_HANDLE=ACE_INVALID_HANDLE) |
virtual int | handle_group_qos (ACE_HANDLE=ACE_INVALID_HANDLE) |
virtual void | reactor (ACE_Reactor *reactor) |
Set the event demultiplexors. | |
virtual ACE_Reactor * | reactor (void) const |
Get the event demultiplexors. | |
virtual ACE_Reactor_Timer_Interface * | reactor_timer_interface (void) const |
Get only the reactor's timer related interface. | |
virtual Reference_Count | add_reference (void) |
Increment reference count on the handler. | |
virtual Reference_Count | remove_reference (void) |
Decrement reference count on the handler. | |
Reference_Counting_Policy & | reference_counting_policy (void) |
Current Reference_Counting_Policy. | |
Protected Member Functions | |
ACE_POSIX_AIOCB_Proactor (size_t nmaxop, ACE_POSIX_Proactor::Proactor_Type ptype) | |
virtual int | get_result_status (ACE_POSIX_Asynch_Result *asynch_result, int &error_status, size_t &transfer_count) |
int | create_result_aiocb_list (void) |
Create aiocb list. | |
int | delete_result_aiocb_list (void) |
void | create_notify_manager (void) |
void | delete_notify_manager (void) |
void | check_max_aio_num (void) |
void | set_notify_handle (ACE_HANDLE h) |
To identify requests from Notify_Pipe_Manager. | |
int | handle_events_i (u_long milli_seconds) |
int | start_deferred_aio (void) |
Start deferred AIO if necessary. | |
virtual int | cancel_aiocb (ACE_POSIX_Asynch_Result *result) |
Cancel running or deferred AIO. | |
ACE_POSIX_Asynch_Result * | find_completed_aio (int &error_status, size_t &transfer_count, size_t &index, size_t &count) |
Extract the results of aio. | |
virtual ssize_t | allocate_aio_slot (ACE_POSIX_Asynch_Result *result) |
Find free slot to store result and aiocb pointer. | |
virtual int | start_aio_i (ACE_POSIX_Asynch_Result *result) |
Initiate an aio operation. | |
virtual int | notify_completion (int sig_num) |
int | putq_result (ACE_POSIX_Asynch_Result *result) |
Put "post_completed" result into the internal queue. | |
ACE_POSIX_Asynch_Result * | getq_result (void) |
Get "post_completed" result from the internal queue. | |
int | clear_result_queue (void) |
Clear the internal results queue. | |
int | process_result_queue (void) |
Process the internal results queue. | |
![]() | |
ACE_POSIX_Proactor (void) | |
Constructor. | |
void | application_specific_code (ACE_POSIX_Asynch_Result *asynch_result, size_t bytes_transferred, const void *completion_key, u_long error) |
virtual int | post_wakeup_completions (int how_many) |
Protected Attributes | |
ACE_AIOCB_Notify_Pipe_Manager * | aiocb_notify_pipe_manager_ |
aiocb ** | aiocb_list_ |
ACE_POSIX_Asynch_Result ** | result_list_ |
size_t | aiocb_list_max_size_ |
To maintain the maximum size of the array (list). | |
size_t | aiocb_list_cur_size_ |
To maintain the current size of the array (list). | |
ACE_SYNCH_MUTEX | mutex_ |
Mutex to protect work with lists. | |
ACE_HANDLE | notify_pipe_read_handle_ |
size_t | num_deferred_aiocb_ |
size_t | num_started_aio_ |
Number active,i.e. running requests. | |
ACE_Unbounded_Queue < ACE_POSIX_Asynch_Result * > | result_queue_ |
Queue which keeps "post_completed" ACE_POSIX_Asynch_Result's. | |
![]() | |
ACE_Handler | wakeup_handler_ |
int | os_id_ |
Friends | |
class | ACE_AIOCB_Notify_Pipe_Manager |
Handler needs to call application specific code. | |
class | ACE_POSIX_Asynch_Operation |
class | ACE_POSIX_Asynch_Accept |
class | ACE_POSIX_Asynch_Connect |
Additional Inherited Members | |
![]() | |
enum | Proactor_Type { PROACTOR_POSIX = 0, PROACTOR_AIOCB = 1, PROACTOR_SIG = 2, PROACTOR_SUN = 3, PROACTOR_CB = 4 } |
enum | SystemType { ACE_OS_UNDEFINED = 0x0000, ACE_OS_WIN = 0x0100, ACE_OS_WIN_NT = ACE_OS_WIN | 0x0001, ACE_OS_WIN_2000 = ACE_OS_WIN | 0x0002, ACE_OS_SUN = 0x0200, ACE_OS_SUN_55 = ACE_OS_SUN | 0x0001, ACE_OS_SUN_56 = ACE_OS_SUN | 0x0002, ACE_OS_SUN_57 = ACE_OS_SUN | 0x0004, ACE_OS_SUN_58 = ACE_OS_SUN | 0x0008, ACE_OS_HPUX = 0x0400, ACE_OS_HPUX_11 = ACE_OS_HPUX | 0x0001, ACE_OS_LINUX = 0x0800, ACE_OS_FREEBSD = 0x1000, ACE_OS_IRIX = 0x2000, ACE_OS_OPENBSD = 0x4000 } |
enum | Opcode { ACE_OPCODE_READ = 1, ACE_OPCODE_WRITE = 2 } |
![]() | |
static ACE_THR_FUNC_RETURN | read_adapter (void *event_handler) |
static int | register_stdin_handler (ACE_Event_Handler *eh, ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr, int flags=THR_DETACHED) |
static int | remove_stdin_handler (ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr) |
Performs the inverse of the register_stdin_handler() method. | |
![]() | |
typedef ACE_Atomic_Op < ACE_SYNCH_MUTEX, Reference_Count > | Atomic_Reference_Count |
Typedef for implementation of reference counting. | |
This Proactor makes use of Asynchronous I/O Control Blocks (AIOCB) to notify/get the completion status of the <aio_> operations issued.
ACE_POSIX_AIOCB_Proactor::ACE_POSIX_AIOCB_Proactor | ( | size_t | nmaxop = ACE_AIO_DEFAULT_SIZE | ) |
Constructor defines max number asynchronous operations which can be started at the same time
|
virtual |
Destructor.
|
protected |
Special constructor for ACE_SUN_Proactor and ACE_POSIX_SIG_Proactor
|
protectedvirtual |
Find free slot to store result and aiocb pointer.
Reimplemented in ACE_POSIX_CB_Proactor.
|
virtual |
This method should be called from ACE_POSIX_Asynch_Operation::cancel() instead of usual ::aio_cancel. For all deferred AIO requests with handle "h" it removes its from the lists and notifies user. For all running AIO requests with handle "h" it calls ::aio_cancel. According to the POSIX standards we will receive ECANCELED for all ::aio_canceled AIO requests later on return from ::aio_suspend
Implements ACE_POSIX_Proactor.
|
protectedvirtual |
Cancel running or deferred AIO.
|
protected |
Define the maximum number of asynchronous I/O requests for the current OS
|
protected |
Clear the internal results queue.
|
virtual |
Close down the Proactor.
Reimplemented from ACE_POSIX_Proactor.
|
protected |
Call these methods from derived class when virtual table is built.
|
protected |
Create aiocb list.
|
protected |
|
protected |
Call this method from derived class when virtual table is built.
|
protected |
Extract the results of aio.
|
virtual |
Reimplemented from ACE_POSIX_Proactor.
Reimplemented in ACE_POSIX_CB_Proactor.
|
protectedvirtual |
Check AIO for completion, error and result status Return: 1 - AIO completed , 0 - not completed yet
|
protected |
Get "post_completed" result from the internal queue.
|
virtual |
Dispatch a single set of events. If wait_time elapses before any events occur, return 0. Return 1 on success i.e., when a completion is dispatched, non-zero (-1) on errors and errno is set accordingly.
Implements ACE_POSIX_Proactor.
Reimplemented in ACE_POSIX_CB_Proactor.
|
virtual |
Block indefinitely until at least one event is dispatched. Dispatch a single set of events. If wait_time elapses before any events occur, return 0. Return 1 on success i.e., when a completion is dispatched, non-zero (-1) on errors and errno is set accordingly.
Implements ACE_POSIX_Proactor.
Reimplemented in ACE_POSIX_CB_Proactor.
|
protected |
Dispatch a single set of events. If <milli_seconds> elapses before any events occur, return 0. Return 1 if a completion dispatched. Return -1 on errors.
|
protectedvirtual |
Notify queue of "post_completed" ACE_POSIX_Asynch_Results called from post_completion method
Reimplemented in ACE_POSIX_CB_Proactor.
|
virtual |
Post a result to the completion port of the Proactor.
Implements ACE_POSIX_Proactor.
|
protected |
Process the internal results queue.
|
protected |
Put "post_completed" result into the internal queue.
|
protected |
To identify requests from Notify_Pipe_Manager.
|
virtual |
Implements ACE_POSIX_Proactor.
|
protectedvirtual |
Initiate an aio operation.
|
protected |
Start deferred AIO if necessary.
|
friend |
Handler needs to call application specific code.
|
friend |
|
friend |
|
friend |
This class does the registering of Asynch Operations with the Proactor which is necessary in the AIOCB strategy.
|
protected |
Use a dynamically allocated array to keep track of all the aio's issued currently.
|
protected |
To maintain the current size of the array (list).
|
protected |
To maintain the maximum size of the array (list).
|
protected |
This class takes care of doing <accept> when we use AIO_CONTROL_BLOCKS strategy.
|
protected |
Mutex to protect work with lists.
|
protected |
The purpose of this member is only to identify asynchronous request from NotifyManager. We will reserve for it always slot 0 in the list of aiocb's to be sure that don't lose notifications.
|
protected |
Number of ACE_POSIX_Asynch_Result's waiting for start i.e. deferred AIOs
|
protected |
Number active,i.e. running requests.
|
protected |
|
protected |
Queue which keeps "post_completed" ACE_POSIX_Asynch_Result's.