summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-05 08:44:58 +0000
committerjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-05 08:44:58 +0000
commitfbd35e2de514f40de668dfa05e8cc5e3fc4473a0 (patch)
treeb021ee6206e790ec26cb7c33f43dee9cccb9f66f
parent08cb2b10d4fd0c5bdf7992fe1232afc42d22f8dd (diff)
downloadATCD-fbd35e2de514f40de668dfa05e8cc5e3fc4473a0.tar.gz
Trying to use sanctioned way of applying asynch IO.
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/IO.cpp9
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.cpp62
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/IO_Acceptor.h8
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/IO_Handler.cpp19
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/IO_Handler.h15
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/Pipeline_Tasks.cpp5
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) */