summaryrefslogtreecommitdiff
path: root/ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp')
-rw-r--r--ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp b/ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp
new file mode 100644
index 00000000000..5a5422eac08
--- /dev/null
+++ b/ACE/examples/QOS/Change_Receiver_FlowSpec/QoS_Signal_Handler.cpp
@@ -0,0 +1,34 @@
+// QoS_Signal_Handler.cpp
+// $Id$
+
+#include "ace/Log_Msg.h"
+#include "QoS_Signal_Handler.h"
+
+
+
+// constructor.
+QoS_Signal_Handler::QoS_Signal_Handler (ACE_QoS_Session *qos_session)
+ : qos_session_ (qos_session)
+{
+}
+
+// Releases the QoS sessions gracefully.
+int
+QoS_Signal_Handler::handle_signal (int signum, siginfo_t *, ucontext_t*)
+{
+ if (signum == SIGINT)
+ {
+ if (this->qos_session_->close () == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to close the QoS session.\n"),
+ -1);
+ else
+ ACE_DEBUG ((LM_DEBUG,
+ "QoS Session with id %d closed successfully.\n",
+ this->qos_session_->session_id ()));
+ }
+ else
+ ACE_DEBUG ((LM_DEBUG,
+ "A signal other than SIGINT received.\nIgnoring.\n"));
+ return 0;
+}