diff options
author | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-05 08:44:58 +0000 |
---|---|---|
committer | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-05 08:44:58 +0000 |
commit | fbd35e2de514f40de668dfa05e8cc5e3fc4473a0 (patch) | |
tree | b021ee6206e790ec26cb7c33f43dee9cccb9f66f | |
parent | 08cb2b10d4fd0c5bdf7992fe1232afc42d22f8dd (diff) | |
download | ATCD-fbd35e2de514f40de668dfa05e8cc5e3fc4473a0.tar.gz |
Trying to use sanctioned way of applying asynch IO.
-rw-r--r-- | apps/JAWS/PROTOTYPE/JAWS/IO.cpp | 9 | ||||
-rw-r--r-- | apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.cpp | 62 | ||||
-rw-r--r-- | apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.h | 8 | ||||
-rw-r--r-- | apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp | 19 | ||||
-rw-r--r-- | apps/JAWS/PROTOTYPE/JAWS/IO_Handler.h | 15 | ||||
-rw-r--r-- | apps/JAWS/PROTOTYPE/JAWS/Pipeline_Tasks.cpp | 5 |
6 files changed, 55 insertions, 63 deletions
diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO.cpp b/apps/JAWS/PROTOTYPE/JAWS/IO.cpp index 7d616def1df..71a693d1c21 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/IO.cpp +++ b/apps/JAWS/PROTOTYPE/JAWS/IO.cpp @@ -243,15 +243,12 @@ JAWS_Asynch_IO::accept (JAWS_IO_Handler *ioh, JAWS_Data_Block *db = ioh->message_block (); ACE_HANDLE listen_handle = db->policy ()->acceptor ()->get_handle (); - JAWS_Asynch_IO_Handler *aioh = - ACE_dynamic_cast (JAWS_Asynch_IO_Handler *, ioh); - - ACE_Asynch_Accept aa; + //JAWS_Asynch_IO_Handler *aioh = + // ACE_dynamic_cast (JAWS_Asynch_IO_Handler *, ioh); size_t bytes_to_read = JAWS_Data_Block::JAWS_DATA_BLOCK_SIZE; - if (aa.open (*(aioh->handler ()), listen_handle) == -1 - || aa.accept (*db, bytes_to_read) == -1) + if (db->policy ()->acceptor ()->accept (bytes_to_read, ioh) == -1) ioh->accept_error (); } diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.cpp b/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.cpp index 9c625c6f44f..50b902738d4 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.cpp +++ b/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.cpp @@ -92,54 +92,19 @@ int JAWS_IO_Asynch_Acceptor::open (const ACE_INET_Addr &address, int backlog) { #if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) - // Tell the acceptor to listen on this->port_, which makes an + // Tell the acceptor to listen on this->port_, which sets up an // asynchronous I/O request to the OS. - // return this->acceptor_.open (address, - // JAWS_Data_Block::JAWS_DATA_BLOCK_SIZE); - - // Create the listener socket - this->handle_ = ACE_OS::socket (PF_INET, SOCK_STREAM, 0); - if (this->handle_ == ACE_INVALID_HANDLE) - ACE_ERROR_RETURN ((LM_ERROR, - ASYS_TEXT ("%p\n"), - ASYS_TEXT ("ACE_OS::socket")), -1); - - // Reuse the address - int one = 1; - if (ACE_OS::setsockopt (this->handle_, - SOL_SOCKET, - SO_REUSEADDR, - (const char*) &one, - sizeof one) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - ASYS_TEXT ("%p\n"), - ASYS_TEXT ("ACE_OS::setsockopt")), -1); - - // If port is not specified, bind to any port. - static ACE_INET_Addr sa ((const ACE_INET_Addr &) ACE_Addr::sap_any); - - if (address == sa && ACE::bind_port (this->handle_) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - ASYS_TEXT ("%p\n"), - ASYS_TEXT ("ACE::bind_port")), -1); - - // Bind to the specified port. - if (ACE_OS::bind (this->handle_, - (sockaddr *) address.get_addr (), - address.get_size ()) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "%p\n", - "ACE_OS::bind"), - -1); - - // Start listening - if (ACE_OS::listen (this->handle_, backlog) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - "%p\n", - "ACE_OS::listen"), -1); + return this->acceptor_.open (address, + JAWS_Data_Block::JAWS_DATA_BLOCK_SIZE, + 0, + backlog, + 1, + 0, + 0, + 0, + 0); - return 0; #else ACE_UNUSED_ARG (address); return -1; @@ -166,11 +131,10 @@ JAWS_IO_Asynch_Acceptor::open (const ACE_HANDLE &socket) } int -JAWS_IO_Asynch_Acceptor::accept (size_t bytes_to_read) +JAWS_IO_Asynch_Acceptor::accept (size_t bytes_to_read, const void *act) { #if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) - // Do nothing, since asynchronous accepts have already been created. - return 0; + return this->acceptor_.accept (bytes_to_read, act); #else ACE_UNUSED_ARG (bytes_to_read); return -1; @@ -197,10 +161,12 @@ JAWS_IO_Asynch_Acceptor::get_handle (void) #if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class ACE_Asynch_Acceptor<JAWS_Asynch_Handler>; template class ACE_Singleton<JAWS_IO_Synch_Acceptor, ACE_SYNCH_MUTEX>; template class ACE_Singleton<JAWS_IO_Asynch_Acceptor, ACE_SYNCH_MUTEX>; template class ACE_LOCK_SOCK_Acceptor<ACE_SYNCH_MUTEX>; #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate ACE_Asynch_Acceptor<JAWS_Asynch_Handler> #pragma instantiate ACE_Singleton<JAWS_IO_Synch_Acceptor, ACE_SYNCH_MUTEX> #pragma instantiate ACE_Singleton<JAWS_IO_Asynch_Acceptor, ACE_SYNCH_MUTEX> #pragma instantiate ACE_LOCK_SOCK_Acceptor<ACE_SYNCH_MUTEX> diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.h b/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.h index af81a0ed87d..d61cb9324e1 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.h +++ b/apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.h @@ -45,7 +45,7 @@ public: int reset_new_handle = 0) const; // Synchronously accept the connection - virtual int accept (size_t bytes_to_read = 0); + virtual int accept (size_t bytes_to_read = 0, const void *act = 0); // This initiates a new asynchronous accept through the AcceptEx call. virtual ACE_HANDLE get_handle (void); @@ -78,7 +78,7 @@ public: // Get the listener's handle private: - virtual int accept (size_t bytes_to_read = 0); + virtual int accept (size_t bytes_to_read = 0, const void *act = 0); private: JAWS_IO_SOCK_Acceptor acceptor_; @@ -95,7 +95,7 @@ public: virtual int open (const ACE_HANDLE &socket); // Initiate an asynchronous passive connection - virtual int accept (size_t bytes_to_read = 0); + virtual int accept (size_t bytes_to_read = 0, const void *act = 0); // This initiates a new asynchronous accept through the AcceptEx call. virtual ACE_HANDLE get_handle (void); @@ -111,7 +111,7 @@ private: private: #if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) - ACE_Asynch_Accept acceptor_; + ACE_Asynch_Acceptor<JAWS_Asynch_Handler> acceptor_; ACE_HANDLE handle_; #endif /* defined (ACE_WIN32) */ }; diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp b/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp index 3e86e4d7419..9ff29e87d64 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp +++ b/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp @@ -218,6 +218,24 @@ JAWS_Asynch_Handler::~JAWS_Asynch_Handler (void) } void +JAWS_Asynch_Handler::open (ACE_HANDLE h, + ACE_Message_Block &mb) +{ + // ioh_ set from the ACT hopefully + this->dispatch_handler (); + + this->handler ()->mb_->copy (mb.rd_ptr (), mb.length ()); + this->handler ()->accept_complete (h); +} + +void +JAWS_Asynch_Handler::act (const void *act_ref) +{ + // Set the ioh from the act + this->ioh_ = (JAWS_IO_Handler *) act; +} + +void JAWS_Asynch_Handler::dispatch_handler (void) { #if 0 @@ -324,6 +342,7 @@ JAWS_Asynch_Handler::handle_transmit_file (const void JAWS_Asynch_Handler::handle_accept (const ACE_Asynch_Accept::Result &result) { + // This routine is never actually called. this->dispatch_handler (); if (result.success ()) diff --git a/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.h b/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.h index 35f68358dbc..252f4bf5dc7 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.h +++ b/apps/JAWS/PROTOTYPE/JAWS/IO_Handler.h @@ -118,10 +118,10 @@ public: }; #if defined(ACE_WIN32) || defined(ACE_HAS_AIO_CALLS) -class JAWS_Export JAWS_Asynch_Handler : public ACE_Handler +class JAWS_Export JAWS_Asynch_Handler : public ACE_Handler //, public ACE_Service_Handler { public: - JAWS_Asynch_Handler (JAWS_IO_Handler *); + JAWS_Asynch_Handler (void); virtual ~JAWS_Asynch_Handler (void); virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result @@ -147,6 +147,12 @@ public: virtual void dispatch_handler (void); + virtual void open (ACE_HANDLE h, ACE_Message_Block &mb); + // Call back entry point for ACE_Asynch_Acceptor + + virtual void act (const void *act_ref); + // Receives the ACT. + private: JAWS_IO_Handler *ioh_; }; @@ -155,6 +161,9 @@ private: class JAWS_Export JAWS_IO_Handler : public JAWS_Abstract_IO_Handler { +#if defined(ACE_WIN32) || defined(ACE_HAS_AIO_CALLS) +friend class JAWS_Asynch_Handler; +#endif /* defined(ACE_WIN32) || defined(ACE_HAS_AIO_CALLS) */ // Provide implementations for the common functions. public: JAWS_IO_Handler (JAWS_IO_Handler_Factory *factory); @@ -216,7 +225,7 @@ protected: // The reference to the handler's factory. #if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) - JAWS_Asynch_Handler handler_; + JAWS_Asynch_Handler *handler_; #endif /* ACE_WIN32 || ACE_HAS_AIO_CALLS */ }; diff --git a/apps/JAWS/PROTOTYPE/JAWS/Pipeline_Tasks.cpp b/apps/JAWS/PROTOTYPE/JAWS/Pipeline_Tasks.cpp index c00ba9573a1..7b3cd77d32d 100644 --- a/apps/JAWS/PROTOTYPE/JAWS/Pipeline_Tasks.cpp +++ b/apps/JAWS/PROTOTYPE/JAWS/Pipeline_Tasks.cpp @@ -121,7 +121,7 @@ JAWS_Pipeline_Accept_Task::handle_put (JAWS_Data_Block *data, #if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) if (policy->ratio () > 1) { - for (int i = 1; i < policy->ratio (); i++) + while (policy->ratio () > 1) { JAWS_IO_Handler *ioh = this->new_handler (data); if (handler == 0) @@ -134,8 +134,9 @@ JAWS_Pipeline_Accept_Task::handle_put (JAWS_Data_Block *data, ioh->factory ()->destroy_io_handler (ioh); break; } + int i = policy->ratio () - 1; + policy->ratio (i); } - policy->ratio (1); } #endif /* defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) */ |