亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? talker.cpp

?? 最新的版本ACE-5.6.8,剛從外文網上搬下,與大家分享.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// was specified from the command line.

int
Peer_Handler::open (void *)
{
  if (host_ != 0) // Connector
    {
      ACE_INET_Addr addr (port_, host_);
      ACE_SOCK_Connector connector;

      // Establish connection with server.
      if (connector.connect (stream_, addr) == -1)
        ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "connect"), -1);

      ACE_DEBUG ((LM_DEBUG, "(%t) connected.\n"));
    }
  else // Acceptor
    {
      ACE_SOCK_Acceptor acceptor;
      ACE_INET_Addr local_addr (port_);

      if ((acceptor.open (local_addr) == -1) ||
          (acceptor.accept (this->stream_) == -1))
        ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "accept failed"), -1);

      ACE_DEBUG ((LM_DEBUG, "(%t) accepted.\n"));
    }

  int result = this->rd_stream_.open (*this);
  if (result != 0)
    return result;

  result = this->wr_stream_.open (*this);
  if (result != 0)
    return result;

  result = this->rd_stream_.read (this->mb_,
                                  this->mb_.size ());
  return result;
}

// One of our asynchronous writes to the remote peer has completed.
// Make sure it succeeded and then delete the message.

void
Peer_Handler::handle_write_stream (const ACE_Asynch_Write_Stream::Result &result)
{
  if (result.bytes_transferred () <= 0)
    ACE_DEBUG ((LM_DEBUG, "(%t) %p bytes = %d\n", "Message failed",
                result.bytes_transferred ()));

  // This was allocated by the STDIN_Handler, queued, dequeued, passed
  // to the proactor, and now passed back to us.
  result.message_block ().release ();
}

// The remote peer has sent us something.  If it succeeded, print
// out the message and reinitiate a read.  Otherwise, fail.  In both
// cases, delete the message sent.


void
Peer_Handler::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
  if (result.bytes_transferred () > 0 &&
      this->mb_.length () > 0)
    {
      this->mb_.rd_ptr ()[result.bytes_transferred ()] = '\0';
      // Print out the message received from the server.
      ACE_DEBUG ((LM_DEBUG, "%s", this->mb_.rd_ptr ()));
    }
  else
    {
      // If a read failed, we will assume it's because the remote peer
      // went away.  We will end the event loop.  Since we're in the
      // main thread, we don't need to do a notify.
      ACE_Reactor::end_event_loop();
      return;
    }

  // Reset pointers
  this->mb_.wr_ptr (this->mb_.wr_ptr () - result.bytes_transferred ());

  // Start off another read
  if (this->rd_stream_.read (this->mb_,
                             this->mb_.size ()) == -1)
    ACE_ERROR ((LM_ERROR, "%p Read initiate.\n", "Peer_Handler"));
}

// This is so the Proactor can get our handle.
ACE_HANDLE
Peer_Handler::handle (void) const
{
  return this->stream_.get_handle ();
}

void
Peer_Handler::handle (ACE_HANDLE handle)
{
  this->stream_.set_handle (handle);
}

// We've been removed from the Reactor.
int
Peer_Handler::handle_close (ACE_HANDLE, ACE_Reactor_Mask)
{
  ACE_DEBUG ((LM_DEBUG, "(%t) Peer_Handler closing down\n"));
  return 0;
}

// New stuff added to the message queue.  Try to dequeue a message.
int
Peer_Handler::handle_output (ACE_HANDLE)
{
  ACE_Message_Block *mb;

  ACE_Time_Value tv (ACE_Time_Value::zero);

  // Forward the message to the remote peer receiver.
  if (this->getq (mb, &tv) != -1)
    {
      if (this->wr_stream_.write (*mb,
                                  mb->length ()) == -1)
        ACE_ERROR_RETURN ((LM_ERROR, "%p Write initiate.\n", "Peer_Handler"), -1);
    }
  return 0;
}

void
STDIN_Handler::handler (int signum)
{
  ACE_DEBUG ((LM_DEBUG, "(%t) signal = %S\n", signum));
}

STDIN_Handler::STDIN_Handler (MT_TASK &ph)
  : ph_ (ph)
{
  // Register for ^C from the console.  We just need to catch the
  // exception so that the kernel doesn't kill our process.
  // Registering this signal handler just tells the kernel that we
  // know what we're doing; to leave us alone.

  ACE_OS::signal (SIGINT, (ACE_SignalHandler) STDIN_Handler::handler);
};

// Activate object.

int
STDIN_Handler::open (void *)
{
  if (this->activate (THR_NEW_LWP | THR_DETACHED) == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "spawn"), -1);

  return 0;
}

// Shut down.

int
STDIN_Handler::close (u_long)
{
  ACE_DEBUG ((LM_DEBUG, "(%t) thread is exiting.\n"));
  return 0;
}

// Thread runs here.

int
STDIN_Handler::svc (void)
{
  this->register_thread_exit_hook ();

  for (;;)
    {
      ACE_Message_Block *mb = new ACE_Message_Block (BUFSIZ);

      // Read from stdin into mb.
      int read_result = ACE_OS::read (ACE_STDIN,
                                      mb->rd_ptr (),
                                      mb->size ());

      // If read succeeds, put mb to peer handler, else end the loop.
      if (read_result > 0)
        {
          mb->wr_ptr (read_result);
          // Note that this call will first enqueue mb onto the peer
          // handler's message queue, which will then turn around and
          // notify the Reactor via the Notification_Strategy.  This
          // will subsequently signal the Peer_Handler, which will
          // react by calling back to its handle_output() method,
          // which dequeues the message and sends it to the peer
          // across the network.
          this->ph_.putq (mb);
        }
      else
        {
          mb->release ();
          break;
        }
    }

  // handle_signal will get called on the main proactor thread since
  // we just exited and the main thread is waiting on our thread exit.
  return 0;
}

// Register an exit hook with the reactor.

void
STDIN_Handler::register_thread_exit_hook (void)
{
  // Get a real handle to our thread.
  ACE_Thread_Manager::instance ()->thr_self (this->thr_handle_);

  // Register ourselves to get called back when our thread exits.

  if (ACE_Reactor::instance ()->
      register_handler (this, this->thr_handle_) == -1)
    ACE_ERROR ((LM_ERROR, "Exit_Hook Register failed.\n"));
}

// The STDIN thread has exited.  This means the user hit ^C.  We can
// end the event loop and delete ourself.

int
STDIN_Handler::handle_signal (int, siginfo_t *si, ucontext_t *)
{
  if (si != 0)
    {
      ACE_ASSERT (this->thr_handle_ == si->si_handle_);
      ACE_Reactor::end_event_loop ();
    }
  return 0;
}

int
STDIN_Handler::handle_close (ACE_HANDLE,
                             ACE_Reactor_Mask)
{
  delete this;
  return 0;
}

int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
  // Let the proactor know that it will be used with Reactor
  // Create specific proactor
  ACE_WIN32_Proactor win32_proactor (0, 1);
  // Get the interface proactor
  ACE_Proactor proactor (&win32_proactor);
  // Put it as the instance.
  ACE_Proactor::instance (&proactor);

  // Open handler for remote peer communications this will run from
  // the main thread.
  Peer_Handler peer_handler (argc, argv);

  if (peer_handler.open () == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "%p open failed, errno = %d.\n",
                       "peer_handler", errno), 0);

  // Open active object for reading from stdin.
  STDIN_Handler *stdin_handler =
    new STDIN_Handler (peer_handler);

  // Spawn thread.
  if (stdin_handler->open () == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "%p open failed, errno = %d.\n",
                       "stdin_handler", errno), 0);

  // Register proactor with Reactor so that we can demultiplex
  // "waitable" events and I/O operations from a single thread.
  if (ACE_Reactor::instance ()->register_handler
      (ACE_Proactor::instance ()->implementation ()) != 0)
    ACE_ERROR_RETURN ((LM_ERROR, "%p failed to register Proactor.\n",
                       argv[0]), -1);

  // Run main event demultiplexor.
  ACE_Reactor::run_event_loop ();

  // Remove proactor with Reactor.
  if (ACE_Reactor::instance ()->remove_handler
      (ACE_Proactor::instance ()->implementation (), ACE_Event_Handler::DONT_CALL) != 0)
    ACE_ERROR_RETURN ((LM_ERROR, "%p failed to register Proactor.\n",
                       argv[0]), -1);

  return 0;
}
#else /* !ACE_HAS_WIN32_OVERLAPPED_IO */
int
ACE_TMAIN (int , ACE_TCHAR *[])
{
  return 0;
}
#endif /* ACE_HAS_WIN32_OVERLAPPED_IO */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男女一区二区三区| 欧美一区二区三区在线电影| 国产mv日韩mv欧美| 国产黄人亚洲片| 欧美怡红院视频| 欧美麻豆精品久久久久久| 欧美人与性动xxxx| 亚洲国产成人自拍| 在线中文字幕一区| 久久午夜色播影院免费高清| 久久影音资源网| 亚洲欧美另类小说| 日本美女一区二区三区视频| 国产精品伊人色| 91精品国产乱码久久蜜臀| 国产精品另类一区| 日本系列欧美系列| 在线观看免费亚洲| 欧美激情在线免费观看| 美女视频免费一区| 欧美日韩国产高清一区| 欧美国产激情一区二区三区蜜月| 5566中文字幕一区二区电影 | 欧美本精品男人aⅴ天堂| 国产精品每日更新在线播放网址| 香蕉久久一区二区不卡无毒影院| 狠狠色狠狠色综合| 日韩一区和二区| 天天综合天天综合色| av高清久久久| 亚洲免费在线播放| 91成人免费网站| 亚洲视频狠狠干| 亚洲成人免费在线观看| 26uuu国产一区二区三区| 亚洲一区免费视频| 色噜噜夜夜夜综合网| 五月婷婷另类国产| 51午夜精品国产| 日本一不卡视频| 国产日韩精品久久久| 成人avav在线| 日韩—二三区免费观看av| 日韩一区二区三区电影| 精品一区二区三区在线播放视频| 精品处破学生在线二十三| 国产一区欧美日韩| 国产盗摄精品一区二区三区在线 | 欧美制服丝袜第一页| 亚洲国产sm捆绑调教视频| 日韩视频123| 91浏览器在线视频| 久久机这里只有精品| 综合久久国产九一剧情麻豆| 欧美日韩一区在线| 精品在线观看视频| 亚洲理论在线观看| 国产亚洲一区二区三区在线观看| 成人av电影在线网| 极品少妇xxxx偷拍精品少妇| 国产精品久久久久久久浪潮网站| 欧美日韩一级二级| 91尤物视频在线观看| 极品少妇xxxx偷拍精品少妇| 一区二区三区精品在线观看| 久久综合久色欧美综合狠狠| 欧美日韩国产高清一区二区三区| 国产成人av电影在线| 久久国产精品无码网站| 美女性感视频久久| 日本中文字幕一区二区有限公司| 亚洲男女毛片无遮挡| 国产精品欧美综合在线| 久久久久久久免费视频了| 91精品国产综合久久久久久| 亚洲免费在线播放| 91在线国产福利| 成人激情免费视频| 色综合天天综合色综合av | 欧美国产一区二区在线观看| 精品国产伦理网| 欧美激情一区二区三区不卡| 国产欧美日韩在线视频| 国产精品女主播av| 国产精品麻豆一区二区| 国产精品久久久久aaaa樱花| 国产偷国产偷精品高清尤物 | 成人av先锋影音| 日本韩国欧美一区| 欧美日韩国产一区二区三区地区| 欧美日韩精品久久久| 日韩欧美一二三| 日本一区二区成人| 亚洲一区二区av在线| 日韩av在线播放中文字幕| 国内国产精品久久| 中文字幕一区在线| 午夜精品视频在线观看| 美腿丝袜一区二区三区| 成人黄色大片在线观看| 播五月开心婷婷综合| 欧美麻豆精品久久久久久| 欧美精品777| 中文字幕亚洲区| 精品系列免费在线观看| 成人av在线播放网站| 欧美精品久久一区| 《视频一区视频二区| 奇米在线7777在线精品| 欧美天堂亚洲电影院在线播放| 精品国产乱码久久久久久久久| 一区二区三区波多野结衣在线观看| 久久成人免费电影| 日韩高清不卡在线| 在线观看亚洲专区| 中文字幕va一区二区三区| 蜜桃视频在线观看一区| 欧美在线小视频| 亚洲一区在线视频观看| 99久久精品国产一区| 国产精品久久久久三级| 国产成人精品免费一区二区| 欧美sm美女调教| 精品综合免费视频观看| 日韩欧美二区三区| 美日韩一级片在线观看| 欧美大片一区二区| 狠狠色狠狠色合久久伊人| 奇米影视一区二区三区| 久久99久久精品欧美| 欧美精品亚洲二区| 午夜精品国产更新| 日韩无一区二区| 成人黄动漫网站免费app| 中文字幕一区二区视频| 欧美最新大片在线看| 日本不卡免费在线视频| 久久久久国产精品麻豆ai换脸| 国产揄拍国内精品对白| 国产精品久久久一区麻豆最新章节| 91麻豆精品一区二区三区| 亚洲成人黄色影院| 欧美变态tickle挠乳网站| 91首页免费视频| 婷婷成人激情在线网| 国产欧美综合色| 欧美另类z0zxhd电影| 成人网男人的天堂| 三级久久三级久久| 国产精品福利电影一区二区三区四区| 91传媒视频在线播放| 国产电影一区二区三区| 亚洲成人免费影院| 亚洲欧美另类小说视频| 久久精品欧美日韩精品| 8x福利精品第一导航| 欧美性videosxxxxx| av网站一区二区三区| 国产一区二区三区免费看 | 精品视频在线免费看| 成人久久18免费网站麻豆| 久久精品国产999大香线蕉| 亚洲午夜免费电影| 亚洲香肠在线观看| 一区二区三区电影在线播| 夜夜夜精品看看| 专区另类欧美日韩| 亚洲激情五月婷婷| 一区二区三区小说| 亚洲国产乱码最新视频| 亚洲午夜免费福利视频| 午夜不卡在线视频| 奇米影视在线99精品| 国产美女精品在线| 国产高清精品久久久久| 成人av先锋影音| 欧美视频一区二区在线观看| 欧美久久久久久久久中文字幕| 欧美日韩国产免费| 国产夜色精品一区二区av| 国产精品久久二区二区| 午夜精品爽啪视频| 国产激情一区二区三区| 在线观看日韩国产| 日韩午夜电影在线观看| 亚洲欧洲成人av每日更新| 亚洲日本在线视频观看| 欧美色综合网站| 欧美电视剧在线看免费| 久久午夜羞羞影院免费观看| 亚洲免费在线视频一区 二区| 日韩av中文在线观看| 色综合久久久久| 久久久综合精品| 蜜臀久久99精品久久久久宅男| 白白色 亚洲乱淫| 日韩精品一区二区三区蜜臀| 一区二区三区国产精华| 国产成人av电影| 久久精品欧美一区二区三区不卡|