⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ha_proactive_status.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
/*** HA_Proactive_Status.cpp,v 1.9 2005/01/21 02:19:19 ossama Exp**** Example program from The ACE Programmer's Guide, Chapter 8.** Copyright 2003 Addison-Wesley. All Rights Reserved.*/#include "HA_Proactive_Status.h"#include "ace/Log_Msg.h"#include "ace/Message_Block.h"#include "ace/Proactor.h"#include "ace/os_include/arpa/os_inet.h"#if (defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) || (defined (ACE_HAS_AIO_CALLS))// Listing 1 code/ch08voidHA_Proactive_Service::open (ACE_HANDLE h, ACE_Message_Block&){  this->handle (h);  if (this->reader_.open (*this) != 0 ||      this->writer_.open (*this) != 0   )    {      ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"),                  ACE_TEXT ("HA_Proactive_Service open")));      delete this;      return;    }  ACE_Message_Block *mb;  ACE_NEW_NORETURN (mb, ACE_Message_Block (1024));  if (this->reader_.read (*mb, mb->space ()) != 0)    {      ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"),                  ACE_TEXT ("HA_Proactive_Service begin read")));      mb->release ();      delete this;      return;    }  // mb is now controlled by Proactor framework.  return;}// Listing 1// Listing 2 code/ch08voidHA_Proactive_Service::handle_read_stream  (const ACE_Asynch_Read_Stream::Result &result){  ACE_Message_Block &mb = result.message_block ();  if (!result.success () || result.bytes_transferred () == 0)    {      mb.release ();      delete this;    }  else    {      if (this->writer_.write (mb, mb.length ()) != 0)        {          ACE_ERROR ((LM_ERROR,                      ACE_TEXT ("%p\n"),                      ACE_TEXT ("starting write")));          mb.release ();        }      else        {          ACE_Message_Block *new_mb;          ACE_NEW_NORETURN (new_mb, ACE_Message_Block (1024));          this->reader_.read (*new_mb, new_mb->space ());        }    }  return;}// Listing 2// Listing 3 code/ch08voidHA_Proactive_Service::handle_write_stream(const ACE_Asynch_Write_Stream::Result &result){  result.message_block ().release ();  return;}// Listing 3// The network address check only works for BSD-ish systems. This// sort of network number accessor should be added to ACE_INET_Addr// at some point...#if defined (ACE_WIN32)intHA_Proactive_Acceptor::validate_connection(const ACE_Asynch_Accept::Result&, const ACE_INET_Addr&, const ACE_INET_Addr&){  return 0;}#else// Listing 4 code/ch08intHA_Proactive_Acceptor::validate_connection (   const ACE_Asynch_Accept::Result&,   const ACE_INET_Addr& remote,   const ACE_INET_Addr& local){  struct in_addr *remote_addr =    reinterpret_cast<struct in_addr*> (remote.get_addr ());  struct in_addr *local_addr =    reinterpret_cast<struct in_addr*> (local.get_addr ());  if (inet_netof (*local_addr) == inet_netof (*remote_addr))    return 0;  return -1;}// Listing 4#endif /* ACE_WIN32 */intACE_TMAIN (int, ACE_TCHAR *[]){  // Listing 5 code/ch08  ACE_INET_Addr listen_addr;     // Set up with listen port  HA_Proactive_Acceptor aio_acceptor;  if (0 != aio_acceptor.open (listen_addr,                              0,     // bytes_to_read                              0,     // pass_addresses                              ACE_DEFAULT_BACKLOG,                              1,     // reuse_addr                              0,     // proactor                              1))    // validate_new_connection    ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"),                       ACE_TEXT ("acceptor open")), 1);  // Listing 5#if 0  // Listing 6 code/ch08  ACE_INET_Addr peer_addr;    // Set up peer addr  ACE_Asynch_Connector<HA_Proactive_Service> aio_connect;  aio_connect.connect (peer_addr);  // Listing 6#endif  // Listing 7 code/ch08  ACE_Proactor::instance ()->proactor_run_event_loop ();  // Listing 7  return 0;}#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)template class ACE_Asynch_Acceptor<HA_Proactive_Service>;#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)#pragma instantiate ACE_Asynch_Acceptor<HA_Proactive_Service>#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION*/#elseintACE_TMAIN (int, ACE_TCHAR *[]){  ACE_DEBUG ((LM_DEBUG,              ACE_TEXT ("This example requires asynchronous I/O support.\n")));  return 1;}#endif /* (ACE_WIN32 && != ACE_HAS_WINCE) || ACE_HAS_AIO_CALLS*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -