summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_EH.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Event/ECG_UDP_EH.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/ECG_UDP_EH.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_EH.cpp b/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_EH.cpp
new file mode 100644
index 00000000000..257a8ff2c3b
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Event/ECG_UDP_EH.cpp
@@ -0,0 +1,89 @@
+// $Id$
+
+#include "orbsvcs/Event/ECG_UDP_EH.h"
+#include "ace/Reactor.h"
+#include "ace/INET_Addr.h"
+
+#if !defined(__ACE_INLINE__)
+#include "orbsvcs/Event/ECG_UDP_EH.i"
+#endif /* __ACE_INLINE__ */
+
+ACE_RCSID(Event, ECG_UDP_EH, "$Id$")
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_ECG_UDP_EH::TAO_ECG_UDP_EH (TAO_ECG_Dgram_Handler *recv)
+ : receiver_ (recv)
+{
+ ACE_ASSERT (this->receiver_);
+}
+
+TAO_ECG_UDP_EH::~TAO_ECG_UDP_EH (void)
+{
+}
+
+int
+TAO_ECG_UDP_EH::open (const ACE_INET_Addr& ipaddr,
+ int reuse_addr)
+{
+ // Check that we haven't been closed already.
+ if (!this->receiver_)
+ return -1;
+
+ if (this->dgram_.open (ipaddr, PF_INET, 0, reuse_addr) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to open udp handler: "
+ "error opening receiving dgram.\n"),
+ -1);
+
+ if (!this->reactor ()
+ || 0 != this->reactor ()->register_handler (this->dgram_.get_handle (),
+ this,
+ ACE_Event_Handler::READ_MASK))
+ {
+ this->dgram_.close ();
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot register handler with reactor.\n"),
+ -1);
+ }
+
+ return 0;
+}
+
+int
+TAO_ECG_UDP_EH::shutdown (void)
+{
+ // Already shut down.
+ if (!this->receiver_)
+ return -1;
+
+ int result = 0;
+ if (this->reactor ())
+ {
+ result = this->reactor ()->remove_handler (this->dgram_.get_handle (),
+ ACE_Event_Handler::READ_MASK);
+ }
+ if (result != 0)
+ ACE_ERROR ((LM_ERROR,
+ "Unable to deregister handler from reactor "
+ "on shutdown.\n"));
+
+ result = this->dgram_.close ();
+ if (result != 0)
+ ACE_ERROR ((LM_ERROR,
+ "Unable to close receiving dgram on shutdown.\n"));
+
+ this->receiver_ = 0;
+
+ return result;
+}
+
+int
+TAO_ECG_UDP_EH::handle_input (ACE_HANDLE)
+{
+ return this->receiver_->handle_input (this->dgram_);
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+// ****************************************************************