www.pudn.com > ACE-5.3 > Asynch_IO.cpp, change:2002-10-28,size:40953b


// Asynch_IO.cpp,v 4.61 2002/10/29 01:39:09 shuston Exp 
 
#include "ace/Asynch_IO.h" 
 
ACE_RCSID(ace, Asynch_IO, "Asynch_IO.cpp,v 4.61 2002/10/29 01:39:09 shuston Exp") 
 
#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) || (defined (ACE_HAS_AIO_CALLS)) 
// This only works on platforms with Asynchronous IO 
 
#include "ace/Proactor.h" 
#include "ace/Message_Block.h" 
#include "ace/INET_Addr.h" 
#include "ace/Asynch_IO_Impl.h" 
 
size_t 
ACE_Asynch_Result::bytes_transferred (void) const 
{ 
  return this->implementation ()->bytes_transferred (); 
} 
 
const void * 
ACE_Asynch_Result::act (void) const 
{ 
  return this->implementation ()->act (); 
} 
 
int 
ACE_Asynch_Result::success (void) const 
{ 
  return this->implementation ()->success (); 
} 
 
const void * 
ACE_Asynch_Result::completion_key (void) const 
{ 
  return this->implementation ()->completion_key (); 
} 
 
u_long 
ACE_Asynch_Result::error (void) const 
{ 
  return this->implementation ()->error (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Result::event (void) const 
{ 
  return this->implementation ()->event (); 
} 
 
u_long 
ACE_Asynch_Result::offset (void) const 
{ 
  return this->implementation ()->offset (); 
} 
 
u_long 
ACE_Asynch_Result::offset_high (void) const 
{ 
  return this->implementation ()->offset_high (); 
} 
 
int 
ACE_Asynch_Result::priority (void) const 
{ 
  return this->implementation ()->priority (); 
} 
 
int 
ACE_Asynch_Result::signal_number (void) const 
{ 
  return this->implementation ()->signal_number (); 
} 
 
ACE_Asynch_Result::ACE_Asynch_Result (ACE_Asynch_Result_Impl *implementation) 
  : implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Result::~ACE_Asynch_Result (void) 
{ 
  // Proactor deletes the implementation when the <complete> finishes.   
} 
 
ACE_Asynch_Result_Impl * 
ACE_Asynch_Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// ********************************************************************* 
 
int 
ACE_Asynch_Operation::open (ACE_Handler &handler, 
                            ACE_HANDLE handle, 
                            const void *completion_key, 
                            ACE_Proactor *proactor) 
{ 
  return this->implementation ()->open (handler, 
                                        handle, 
                                        completion_key, 
                                        proactor); 
} 
 
int 
ACE_Asynch_Operation::cancel (void) 
{ 
  return this->implementation ()->cancel (); 
} 
 
ACE_Proactor * 
ACE_Asynch_Operation::proactor (void) const 
{ 
  return this->implementation ()->proactor (); 
} 
 
ACE_Asynch_Operation_Impl * 
ACE_Asynch_Operation::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
ACE_Asynch_Operation::ACE_Asynch_Operation (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Operation::~ACE_Asynch_Operation (void) 
{ 
  delete this->implementation_; 
  this->implementation_ = 0; 
} 
 
void 
ACE_Asynch_Operation::implementation (ACE_Asynch_Operation_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
} 
 
ACE_Proactor * 
ACE_Asynch_Operation::get_proactor (ACE_Proactor *user_proactor, 
                                    ACE_Handler &handler) const 
{ 
  if (user_proactor == 0) 
    { 
      // Grab the singleton proactor if <handler->proactor> is zero 
      user_proactor = handler.proactor (); 
      if (user_proactor == 0) 
        user_proactor = ACE_Proactor::instance (); 
    } 
 
  return user_proactor; 
} 
 
// ************************************************************ 
 
ACE_Asynch_Read_Stream::ACE_Asynch_Read_Stream (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Read_Stream::~ACE_Asynch_Read_Stream (void) 
{ 
} 
 
int 
ACE_Asynch_Read_Stream::open (ACE_Handler &handler, 
                              ACE_HANDLE handle, 
                              const void *completion_key, 
                              ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Read_Stream_Impl *implementation = proactor->create_asynch_read_stream (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class.  
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
   
int 
ACE_Asynch_Read_Stream::read (ACE_Message_Block &message_block, 
                              size_t bytes_to_read, 
                              const void *act, 
                              int priority, 
                              int signal_number) 
{ 
  return this->implementation ()->read (message_block, 
                                        bytes_to_read, 
                                        act, 
                                        priority, 
                                        signal_number); 
} 
 
#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE) && (ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0)) 
int 
ACE_Asynch_Read_Stream::readv (ACE_Message_Block &message_block, 
                               size_t bytes_to_read, 
                               const void *act, 
                               int priority, 
                               int signal_number) 
{ 
  return this->implementation ()->readv (message_block, 
                                         bytes_to_read, 
                                         act, 
                                         priority, 
                                         signal_number); 
} 
#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE) && (ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0)) */ 
 
ACE_Asynch_Read_Stream_Impl * 
ACE_Asynch_Read_Stream::implementation (void) const 
{ 
  return implementation_; 
} 
 
void 
ACE_Asynch_Read_Stream::implementation (ACE_Asynch_Read_Stream_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
 
  // Init the base class' implementation also. 
  ACE_Asynch_Operation::implementation (this->implementation_); 
} 
 
// ************************************************************ 
 
size_t 
ACE_Asynch_Read_Stream::Result::bytes_to_read (void) const 
{ 
  return this->implementation ()->bytes_to_read (); 
} 
 
ACE_Message_Block & 
ACE_Asynch_Read_Stream::Result::message_block (void) const 
{ 
  return this->implementation ()->message_block (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Read_Stream::Result::handle (void) const 
{ 
  return this->implementation ()->handle (); 
} 
 
ACE_Asynch_Read_Stream::Result::Result (ACE_Asynch_Read_Stream_Result_Impl *implementation) 
  : ACE_Asynch_Result (implementation),  
    implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Read_Stream::Result::~Result (void) 
{ 
  // Proactor will delete the implementation after <complete> is 
  // finished. 
} 
 
ACE_Asynch_Read_Stream_Result_Impl * 
ACE_Asynch_Read_Stream::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// *************************************************** 
 
ACE_Asynch_Write_Stream::ACE_Asynch_Write_Stream (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Write_Stream::~ACE_Asynch_Write_Stream (void) 
{ 
} 
 
int 
ACE_Asynch_Write_Stream::open (ACE_Handler &handler, 
                               ACE_HANDLE handle, 
                               const void *completion_key, 
                               ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Write_Stream_Impl *implementation = proactor->create_asynch_write_stream (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class. 
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
int 
ACE_Asynch_Write_Stream::write (ACE_Message_Block &message_block, 
                                size_t bytes_to_write, 
                                const void *act, 
                                int priority, 
                                int signal_number) 
{ 
  return this->implementation ()->write (message_block, 
                                         bytes_to_write, 
                                         act, 
                                         priority, 
                                        signal_number); 
} 
 
#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE) && (ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0)) 
int 
ACE_Asynch_Write_Stream::writev (ACE_Message_Block &message_block, 
                                 size_t bytes_to_write, 
                                 const void *act, 
                                 int priority, 
                                 int signal_number) 
{ 
  return this->implementation ()->writev (message_block, 
                                          bytes_to_write, 
                                          act, 
                                          priority, 
                                          signal_number); 
} 
#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE) && (ACE_HAS_WINNT4) && (ACE_HAS_WINNT4 != 0)) */ 
 
ACE_Asynch_Write_Stream_Impl * 
ACE_Asynch_Write_Stream::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
void 
ACE_Asynch_Write_Stream::implementation (ACE_Asynch_Write_Stream_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
 
  // Init the base class' implementation also. 
  ACE_Asynch_Operation::implementation (this->implementation_); 
} 
 
// ************************************************************ 
 
size_t 
ACE_Asynch_Write_Stream::Result::bytes_to_write (void) const 
{ 
  return this->implementation ()->bytes_to_write (); 
} 
 
ACE_Message_Block & 
ACE_Asynch_Write_Stream::Result::message_block (void) const 
{ 
  return this->implementation ()->message_block (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Write_Stream::Result::handle (void) const 
{ 
  return this->implementation ()->handle (); 
} 
 
ACE_Asynch_Write_Stream::Result::Result (ACE_Asynch_Write_Stream_Result_Impl *implementation) 
  : ACE_Asynch_Result (implementation), 
    implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Write_Stream::Result::~Result (void) 
{ 
  // Proactor will delte the implementation when the <complete> call 
  // finishes. 
} 
 
ACE_Asynch_Write_Stream_Result_Impl * 
ACE_Asynch_Write_Stream::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// ************************************************************ 
 
ACE_Asynch_Read_File::ACE_Asynch_Read_File (void) 
  : implementation_ (0) 
{ 
}  
 
ACE_Asynch_Read_File::~ACE_Asynch_Read_File (void) 
{ 
}  
 
int 
ACE_Asynch_Read_File::open (ACE_Handler &handler, 
                            ACE_HANDLE handle, 
                            const void *completion_key, 
                            ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Read_File_Impl *implementation = proactor->create_asynch_read_file (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class. 
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
int 
ACE_Asynch_Read_File::read (ACE_Message_Block &message_block, 
                            size_t bytes_to_read, 
                            u_long offset, 
                            u_long offset_high, 
                            const void *act, 
                            int priority, 
                            int signal_number) 
{ 
  return this->implementation ()->read (message_block, 
                                        bytes_to_read, 
                                        offset, 
                                        offset_high, 
                                        act, 
                                        priority, 
                                        signal_number); 
} 
 
#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) 
int 
ACE_Asynch_Read_File::readv (ACE_Message_Block &message_block, 
                             size_t bytes_to_read, 
                             u_long offset, 
                             u_long offset_high, 
                             const void *act, 
                             int priority, 
                             int signal_number) 
{ 
  return this->implementation ()->readv (message_block, 
                                         bytes_to_read, 
                                         offset, 
                                         offset_high, 
                                         act, 
                                         priority, 
                                         signal_number); 
} 
#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ 
 
ACE_Asynch_Read_File_Impl * 
ACE_Asynch_Read_File::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
void 
ACE_Asynch_Read_File::implementation (ACE_Asynch_Read_File_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
 
  // Set also the base class' implementation. 
  ACE_Asynch_Read_Stream::implementation (implementation); 
} 
 
// ************************************************************ 
 
ACE_Asynch_Read_File::Result::Result (ACE_Asynch_Read_File_Result_Impl *implementation) 
  : ACE_Asynch_Read_Stream::Result (implementation), 
    implementation_ (implementation) 
{ 
} 
   
ACE_Asynch_Read_File::Result::~Result (void) 
{ 
  // Proactor will delete the implementation when <complete> call 
  // completes. 
} 
 
ACE_Asynch_Read_File_Result_Impl * 
ACE_Asynch_Read_File::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// ************************************************************ 
 
ACE_Asynch_Write_File::ACE_Asynch_Write_File (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Write_File::~ACE_Asynch_Write_File (void) 
{ 
} 
 
int 
ACE_Asynch_Write_File::open (ACE_Handler &handler, 
                             ACE_HANDLE handle, 
                             const void *completion_key, 
                             ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Write_File_Impl *implementation = proactor->create_asynch_write_file (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class. 
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
int 
ACE_Asynch_Write_File::write (ACE_Message_Block &message_block, 
                              size_t bytes_to_write, 
                              u_long offset, 
                              u_long offset_high, 
                              const void *act, 
                              int priority, 
                              int signal_number) 
{ 
  return this->implementation ()->write (message_block, 
                                         bytes_to_write, 
                                         offset, 
                                         offset_high, 
                                         act, 
                                         priority, 
                                         signal_number); 
} 
 
#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) 
int 
ACE_Asynch_Write_File::writev (ACE_Message_Block &message_block, 
                               size_t bytes_to_write, 
                               u_long offset, 
                               u_long offset_high, 
                               const void *act, 
                               int priority, 
                               int signal_number) 
{ 
  return this->implementation ()->writev (message_block, 
                                          bytes_to_write, 
                                          offset, 
                                          offset_high, 
                                          act, 
                                          priority, 
                                          signal_number); 
} 
#endif /* (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) */ 
 
ACE_Asynch_Write_File_Impl * 
ACE_Asynch_Write_File::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
void 
ACE_Asynch_Write_File::implementation (ACE_Asynch_Write_File_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
   
  // Init the base class' implementation also. 
  ACE_Asynch_Write_Stream::implementation (implementation); 
} 
 
// ************************************************************ 
 
ACE_Asynch_Write_File::Result::Result (ACE_Asynch_Write_File_Result_Impl *implementation) 
  : ACE_Asynch_Write_Stream::Result (implementation), 
    implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Write_File::Result::~Result (void) 
{ 
  // Proactor will delete the implementation when the <complete> call 
  // completes.  
} 
 
ACE_Asynch_Write_File_Result_Impl * 
ACE_Asynch_Write_File::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// ********************************************************************* 
 
ACE_Asynch_Accept::ACE_Asynch_Accept (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Accept::~ACE_Asynch_Accept (void) 
{ 
} 
 
int 
ACE_Asynch_Accept::open (ACE_Handler &handler, 
                         ACE_HANDLE handle, 
                         const void *completion_key, 
                         ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Accept_Impl *implementation = proactor->create_asynch_accept (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class. 
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
int 
ACE_Asynch_Accept::accept (ACE_Message_Block &message_block, 
                           size_t bytes_to_read, 
                           ACE_HANDLE accept_handle, 
                           const void *act, 
                           int priority, 
                           int signal_number) 
{ 
  return this->implementation ()->accept (message_block, 
                                          bytes_to_read, 
                                          accept_handle, 
                                          act, 
                                          priority, 
                                          signal_number); 
} 
 
ACE_Asynch_Accept_Impl * 
ACE_Asynch_Accept::implementation (void)  const 
{ 
  return this->implementation_; 
} 
 
void 
ACE_Asynch_Accept::implementation (ACE_Asynch_Accept_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
  // Set the implementation in the base class. 
  ACE_Asynch_Operation::implementation (implementation); 
} 
 
// ************************************************************ 
 
size_t 
ACE_Asynch_Accept::Result::bytes_to_read (void) const 
{ 
  return this->implementation ()->bytes_to_read (); 
} 
 
ACE_Message_Block & 
ACE_Asynch_Accept::Result::message_block (void) const 
{ 
  return this->implementation ()->message_block (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Accept::Result::listen_handle (void) const 
{ 
  return this->implementation ()->listen_handle (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Accept::Result::accept_handle (void) const 
{ 
  return this->implementation ()->accept_handle (); 
} 
 
ACE_Asynch_Accept::Result::Result (ACE_Asynch_Accept_Result_Impl *implementation) 
  : ACE_Asynch_Result (implementation), 
    implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Accept::Result::~Result (void) 
{ 
  // Proactor will delete the implementation when the <complete> call 
  // completes. 
} 
 
ACE_Asynch_Accept_Result_Impl * 
ACE_Asynch_Accept::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
 
 
// ********************************************************************* 
 
ACE_Asynch_Connect::ACE_Asynch_Connect (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Connect::~ACE_Asynch_Connect (void) 
{ 
} 
 
int 
ACE_Asynch_Connect::open (ACE_Handler &handler, 
                          ACE_HANDLE handle, 
                          const void *completion_key, 
                          ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Connect_Impl *implementation = proactor->create_asynch_connect (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class. 
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
int 
ACE_Asynch_Connect::connect (ACE_HANDLE connect_handle, 
                             const ACE_Addr & remote_sap, 
                             const ACE_Addr & local_sap, 
                             int  reuse_addr, 
                             const void *act, 
                             int priority, 
                             int signal_number) 
{ 
  return this->implementation ()->connect (connect_handle, 
                                           remote_sap, 
                                           local_sap, 
                                           reuse_addr, 
                                           act, 
                                           priority, 
                                           signal_number); 
} 
 
ACE_Asynch_Connect_Impl * 
ACE_Asynch_Connect::implementation (void)  const 
{ 
  return this->implementation_; 
} 
 
void 
ACE_Asynch_Connect::implementation (ACE_Asynch_Connect_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
  // Set the implementation in the base class. 
  ACE_Asynch_Operation::implementation (implementation); 
} 
 
// ************************************************************ 
 
ACE_Asynch_Connect::Result::Result (ACE_Asynch_Connect_Result_Impl *implementation) 
  : ACE_Asynch_Result (implementation), 
    implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Connect::Result::~Result (void) 
{ 
  // Proactor will delete the implementation when the <complete> call 
  // completes. 
} 
 
ACE_HANDLE 
ACE_Asynch_Connect::Result::connect_handle (void) const 
{ 
  return this->implementation ()->connect_handle (); 
} 
 
 
ACE_Asynch_Connect_Result_Impl * 
ACE_Asynch_Connect::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// ************************************************************ 
 
ACE_Asynch_Transmit_File::ACE_Asynch_Transmit_File (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Transmit_File::~ACE_Asynch_Transmit_File (void) 
{ 
} 
 
int 
ACE_Asynch_Transmit_File::open (ACE_Handler &handler, 
                                ACE_HANDLE handle, 
                                const void *completion_key, 
                                ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Transmit_File_Impl *implementation = proactor->create_asynch_transmit_file (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class. 
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
int 
ACE_Asynch_Transmit_File::transmit_file (ACE_HANDLE 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, 
                                         int priority, 
                                         int signal_number) 
{ 
  return this->implementation ()->transmit_file (file, 
                                                 header_and_trailer, 
                                                 bytes_to_write, 
                                                 offset, 
                                                 offset_high, 
                                                 bytes_per_send, 
                                                 flags, 
                                                 act, 
                                                 priority, 
                                                 signal_number); 
} 
 
ACE_Asynch_Transmit_File_Impl * 
ACE_Asynch_Transmit_File::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
void 
ACE_Asynch_Transmit_File::implementation (ACE_Asynch_Transmit_File_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
  // Set the base class' implementation also. 
  ACE_Asynch_Operation::implementation (this->implementation_); 
} 
 
// *********************************************************************************** 
 
ACE_HANDLE 
ACE_Asynch_Transmit_File::Result::socket (void) const 
{ 
  return this->implementation ()->socket (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Transmit_File::Result::file (void) const 
{ 
  return this->implementation ()->file (); 
} 
 
ACE_Asynch_Transmit_File::Header_And_Trailer * 
ACE_Asynch_Transmit_File::Result::header_and_trailer (void) const 
{ 
  return this->implementation ()->header_and_trailer (); 
} 
 
size_t 
ACE_Asynch_Transmit_File::Result::bytes_to_write (void) const 
{ 
  return this->implementation ()->bytes_to_write (); 
} 
 
size_t 
ACE_Asynch_Transmit_File::Result::bytes_per_send (void) const 
{ 
  return this->implementation ()->bytes_per_send (); 
} 
 
u_long 
ACE_Asynch_Transmit_File::Result::flags (void) const 
{ 
  return this->implementation ()->flags (); 
} 
 
ACE_Asynch_Transmit_File::Result::Result (ACE_Asynch_Transmit_File_Result_Impl *implementation) 
  : ACE_Asynch_Result (implementation), 
    implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Transmit_File::Result::~Result (void) 
{ 
} 
 
ACE_Asynch_Transmit_File_Result_Impl * 
ACE_Asynch_Transmit_File::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// ************************************************************ 
 
ACE_Asynch_Transmit_File::Header_And_Trailer::Header_And_Trailer (ACE_Message_Block *header, 
                                                                  size_t header_bytes, 
                                                                  ACE_Message_Block *trailer, 
                                                                  size_t trailer_bytes) 
  : header_ (header), 
    header_bytes_ (header_bytes), 
    trailer_ (trailer), 
    trailer_bytes_ (trailer_bytes) 
{ 
} 
 
ACE_Asynch_Transmit_File::Header_And_Trailer::~Header_And_Trailer (void) 
{ 
} 
 
void 
ACE_Asynch_Transmit_File::Header_And_Trailer::header_and_trailer (ACE_Message_Block *header, 
                                                                  size_t header_bytes, 
                                                                  ACE_Message_Block *trailer, 
                                                                  size_t trailer_bytes) 
{ 
  this->header (header); 
  this->header_bytes (header_bytes); 
  this->trailer (trailer); 
  this->trailer_bytes (trailer_bytes); 
} 
 
ACE_Message_Block * 
ACE_Asynch_Transmit_File::Header_And_Trailer::header (void) const 
{ 
  return this->header_; 
} 
 
void 
ACE_Asynch_Transmit_File::Header_And_Trailer::header (ACE_Message_Block *message_block) 
{ 
  this->header_ = message_block; 
} 
 
size_t 
ACE_Asynch_Transmit_File::Header_And_Trailer::header_bytes (void) const 
{ 
  return this->header_bytes_; 
} 
 
void 
ACE_Asynch_Transmit_File::Header_And_Trailer::header_bytes (size_t bytes) 
{ 
  this->header_bytes_ = bytes; 
} 
 
ACE_Message_Block * 
ACE_Asynch_Transmit_File::Header_And_Trailer::trailer (void) const 
{ 
  return this->trailer_; 
} 
 
void 
ACE_Asynch_Transmit_File::Header_And_Trailer::trailer (ACE_Message_Block *message_block) 
{ 
  this->trailer_ = message_block; 
} 
 
size_t 
ACE_Asynch_Transmit_File::Header_And_Trailer::trailer_bytes (void) const 
{ 
  return this->trailer_bytes_; 
} 
 
void 
ACE_Asynch_Transmit_File::Header_And_Trailer::trailer_bytes (size_t bytes) 
{ 
  this->trailer_bytes_ = bytes; 
} 
 
ACE_LPTRANSMIT_FILE_BUFFERS 
ACE_Asynch_Transmit_File::Header_And_Trailer::transmit_buffers (void) 
{ 
  // If both are zero, return zero 
  if (this->header_ == 0 && this->trailer_ == 0) 
    return 0; 
  else 
    { 
      // Something is valid 
 
      // If header is valid, set the fields 
      if (this->header_ != 0) 
        { 
          this->transmit_buffers_.Head = this->header_->rd_ptr (); 
#if defined(ACE_WIN64) 
          this->transmit_buffers_.HeadLength = 
            ACE_static_cast (DWORD, this->header_bytes_); 
#else 
          this->transmit_buffers_.HeadLength = this->header_bytes_; 
#endif /* ACE_WIN64 */ 
        } 
      else 
        { 
          this->transmit_buffers_.Head = 0; 
          this->transmit_buffers_.HeadLength = 0; 
        } 
 
      // If trailer is valid, set the fields 
      if (this->trailer_ != 0) 
        { 
          this->transmit_buffers_.Tail = this->trailer_->rd_ptr (); 
#if defined(ACE_WIN64) 
          this->transmit_buffers_.TailLength = 
            ACE_static_cast (DWORD, this->trailer_bytes_); 
#else 
          this->transmit_buffers_.TailLength = this->trailer_bytes_; 
#endif /* ACE_WIN64 */ 
        } 
      else 
        { 
          this->transmit_buffers_.Tail = 0; 
          this->transmit_buffers_.TailLength = 0; 
        } 
 
      // Return the transmit buffers 
      return &this->transmit_buffers_; 
    } 
} 
 
// ********************************************************************* 
 
ACE_Handler::ACE_Handler (void) 
  : proactor_ (0), handle_ (ACE_INVALID_HANDLE) 
{ 
} 
 
ACE_Handler::ACE_Handler (ACE_Proactor *d) 
  : proactor_ (d), handle_ (ACE_INVALID_HANDLE) 
{ 
} 
 
ACE_Handler::~ACE_Handler (void) 
{ 
} 
 
void 
ACE_Handler::handle_read_stream (const ACE_Asynch_Read_Stream::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_write_stream (const ACE_Asynch_Write_Stream::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_write_dgram (const ACE_Asynch_Write_Dgram::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_read_dgram (const ACE_Asynch_Read_Dgram::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_accept (const ACE_Asynch_Accept::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_connect (const ACE_Asynch_Connect::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_transmit_file (const ACE_Asynch_Transmit_File::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_read_file (const ACE_Asynch_Read_File::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_write_file (const ACE_Asynch_Write_File::Result & /* result */) 
{ 
} 
 
void 
ACE_Handler::handle_time_out (const ACE_Time_Value & /* tv */, 
                              const void *           /* act */) 
{ 
} 
 
void 
ACE_Handler::handle_wakeup (void) 
{ 
} 
 
ACE_Proactor * 
ACE_Handler::proactor (void) 
{ 
  return this->proactor_; 
} 
 
void 
ACE_Handler::proactor (ACE_Proactor *p) 
{ 
  this->proactor_ = p; 
} 
 
ACE_HANDLE 
ACE_Handler::handle (void) const 
{ 
  return this->handle_; 
} 
 
void 
ACE_Handler::handle (ACE_HANDLE h) 
{ 
  this->handle_ = h; 
} 
 
// ************************************************************ 
 
ACE_Service_Handler::ACE_Service_Handler (void) 
{ 
} 
 
ACE_Service_Handler::~ACE_Service_Handler (void) 
{ 
} 
 
void 
ACE_Service_Handler::addresses (const ACE_INET_Addr & /* remote_address */, 
                                const ACE_INET_Addr & /* local_address */ ) 
{ 
} 
 
void 
ACE_Service_Handler::act (const void *) 
{ 
} 
 
void 
ACE_Service_Handler::open (ACE_HANDLE, 
                           ACE_Message_Block &) 
{ 
} 
 
 
// ************************************************************ 
 
ACE_Asynch_Read_Dgram::ACE_Asynch_Read_Dgram (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Read_Dgram::~ACE_Asynch_Read_Dgram (void) 
{ 
} 
 
int 
ACE_Asynch_Read_Dgram::open (ACE_Handler &handler, 
                             ACE_HANDLE handle, 
                             const void *completion_key, 
                             ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Read_Dgram_Impl *implementation = proactor->create_asynch_read_dgram (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
 
  // Call the <open> method of the base class.  
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
ssize_t 
ACE_Asynch_Read_Dgram::recv (ACE_Message_Block *message_block, 
                             size_t &number_of_bytes_recvd, 
                             int flags, 
                             int protocol_family, 
                             const void *act, 
                             int priority, 
                             int signal_number) 
{ 
  return this->implementation ()->recv (message_block, 
                                        number_of_bytes_recvd, 
                                        flags, 
                                        protocol_family, 
                                        act, 
                                        priority, 
                                        signal_number); 
} 
 
ACE_Asynch_Read_Dgram_Impl * 
ACE_Asynch_Read_Dgram::implementation (void) const 
{ 
  return implementation_; 
} 
 
void 
ACE_Asynch_Read_Dgram::implementation (ACE_Asynch_Read_Dgram_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
 
  // Init the bas class' implementation also. 
  ACE_Asynch_Operation::implementation(this->implementation_); 
} 
 
// ************************************************************ 
 
int 
ACE_Asynch_Read_Dgram::Result::remote_address (ACE_Addr& addr) const 
{ 
  return this->implementation ()->remote_address (addr); 
} 
 
ACE_Message_Block* 
ACE_Asynch_Read_Dgram::Result::message_block (void) const 
{ 
  return this->implementation ()->message_block (); 
} 
 
int 
ACE_Asynch_Read_Dgram::Result::flags (void) const 
{ 
  return this->implementation ()->flags (); 
} 
 
size_t 
ACE_Asynch_Read_Dgram::Result::bytes_to_read (void) const 
{ 
  return this->implementation ()->bytes_to_read (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Read_Dgram::Result::handle (void) const 
{ 
  return this->implementation ()->handle(); 
} 
 
ACE_Asynch_Read_Dgram::Result::Result (ACE_Asynch_Read_Dgram_Result_Impl *implementation) 
: ACE_Asynch_Result (implementation), 
  implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Read_Dgram::Result::~Result (void) 
{ 
} 
 
ACE_Asynch_Read_Dgram_Result_Impl * 
ACE_Asynch_Read_Dgram::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
// ************************************************************ 
 
 
ACE_Asynch_Write_Dgram::ACE_Asynch_Write_Dgram (void) 
  : implementation_ (0) 
{ 
} 
 
ACE_Asynch_Write_Dgram::~ACE_Asynch_Write_Dgram (void) 
{ 
} 
 
int 
ACE_Asynch_Write_Dgram::open (ACE_Handler &handler, 
                              ACE_HANDLE handle, 
                              const void *completion_key, 
                              ACE_Proactor *proactor) 
{ 
  // Get a proactor for/from the user. 
  proactor = this->get_proactor (proactor, handler); 
 
  // Delete the old implementation. 
  delete this->implementation_; 
  this->implementation_ = 0; 
 
  // Now let us get the implementation initialized. 
  ACE_Asynch_Write_Dgram_Impl *implementation = proactor->create_asynch_write_dgram (); 
  if (implementation == 0) 
    return -1; 
   
  // Set the implementation class 
  this->implementation (implementation); 
   
  // Call the <open> method of the base class. 
  return ACE_Asynch_Operation::open (handler, 
                                     handle, 
                                     completion_key, 
                                     proactor); 
} 
 
ssize_t 
ACE_Asynch_Write_Dgram::send (ACE_Message_Block *message_block, 
                              size_t &number_of_bytes_sent, 
                              int flags, 
                              const ACE_Addr& remote_addr, 
                              const void *act, 
                              int priority, 
                              int signal_number) 
{ 
  return this->implementation ()->send (message_block, 
                                        number_of_bytes_sent, 
                                        flags, 
                                        remote_addr, 
                                        act, 
                                        priority, 
                                        signal_number); 
} 
 
ACE_Asynch_Write_Dgram_Impl * 
ACE_Asynch_Write_Dgram::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
void 
ACE_Asynch_Write_Dgram::implementation (ACE_Asynch_Write_Dgram_Impl *implementation) 
{ 
  this->implementation_ = implementation; 
 
  // Init the base class' implementation also. 
  ACE_Asynch_Operation::implementation (this->implementation_); 
} 
 
// ************************************************************ 
 
size_t 
ACE_Asynch_Write_Dgram::Result::bytes_to_write (void) const 
{ 
  return this->implementation ()->bytes_to_write (); 
} 
 
ACE_Message_Block* 
ACE_Asynch_Write_Dgram::Result::message_block () const 
{ 
  return this->implementation ()->message_block (); 
} 
 
int 
ACE_Asynch_Write_Dgram::Result::flags (void) const 
{ 
  return this->implementation ()->flags (); 
} 
 
ACE_HANDLE 
ACE_Asynch_Write_Dgram::Result::handle (void) const 
{ 
  return this->implementation ()->handle (); 
} 
 
ACE_Asynch_Write_Dgram_Result_Impl * 
ACE_Asynch_Write_Dgram::Result::implementation (void) const 
{ 
  return this->implementation_; 
} 
 
ACE_Asynch_Write_Dgram::Result::Result (ACE_Asynch_Write_Dgram_Result_Impl *implementation) 
: ACE_Asynch_Result (implementation), 
  implementation_ (implementation) 
{ 
} 
 
ACE_Asynch_Write_Dgram::Result::~Result (void) 
{ 
} 
 
#endif /* ACE_WIN32 || ACE_HAS_AIO_CALLS */