synch_io.cpp

来自「ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识」· C++ 代码 · 共 266 行

CPP
266
字号
// $Id: Synch_IO.cpp 58273 2004-06-10 22:44:29Z shuston $#include "ace/ACE.h"#ifndef JAWS_BUILD_DLL#define JAWS_BUILD_DLL#endif#include "jaws3/IO.h"#include "jaws3/Synch_IO.h"#include "jaws3/Event_Completer.h"static JAWS_Event_ResultJAWS_synch_send ( ACE_HANDLE handle                , ACE_Message_Block *mb                , const ACE_Time_Value *tv = 0                ){  JAWS_Event_Result io_result;  ssize_t result = ACE::send_n (handle, mb->rd_ptr (), mb->length (), tv);  if (result < 0)    {      if (errno == ETIME)        {          JAWS_Event_Result tmp_io_result ( 0                                          , JAWS_Event_Result::JE_ERROR                                          , JAWS_Event_Result::JE_SEND_TIMEOUT                                          );          io_result = tmp_io_result;        }      else        {          JAWS_Event_Result tmp_io_result ( 0                                          , JAWS_Event_Result::JE_ERROR                                          , JAWS_Event_Result::JE_SEND_FAIL                                          );          io_result = tmp_io_result;        }    }  else if ((size_t) result < mb->length ())    {      if (result > 0)        mb->rd_ptr (result);      JAWS_Event_Result tmp_io_result ( result                                      , JAWS_Event_Result::JE_ERROR                                      , JAWS_Event_Result::JE_SEND_SHORT                                      );      io_result = tmp_io_result;    }  else    {      if (result > 0)        mb->rd_ptr (result);      JAWS_Event_Result tmp_io_result ( result                                      , JAWS_Event_Result::JE_OK                                      , JAWS_Event_Result::JE_SEND_OK                                      );      io_result = tmp_io_result;    }  return io_result;}voidJAWS_Synch_IO::send ( ACE_HANDLE handle                    , ACE_Message_Block *mb                    , JAWS_Event_Completer *completer                    , const ACE_Time_Value &tv                    , void *act                    ){  JAWS_Event_Result io_result;  const ACE_Time_Value *tvp = 0;  if (ACE_Time_Value::zero < tv)    tvp = &tv;  io_result = JAWS_synch_send (handle, mb, tvp);  if (completer)    completer->output_complete (io_result, act);}voidJAWS_Synch_IO::send ( ACE_HANDLE handle                    , ACE_Message_Block *mb                    , JAWS_Event_Completer *completer                    , void *act                    ){  this->send (handle, mb, completer, ACE_Time_Value::zero, act);}voidJAWS_Synch_IO::recv ( ACE_HANDLE handle                    , ACE_Message_Block *mb                    , JAWS_Event_Completer *completer                    , const ACE_Time_Value &tv                    , void *act                    ){  JAWS_Event_Result io_result;  const ACE_Time_Value *tvp = 0;  if (ACE_Time_Value::zero < tv)    tvp = &tv;  ssize_t result = ACE::recv (handle, mb->wr_ptr (), mb->space (), tvp);  if (result < 0)    {      JAWS_Event_Result tmp_io_result ( 0                                      , JAWS_Event_Result::JE_ERROR                                      , JAWS_Event_Result::JE_RECV_FAIL                                      );      io_result = tmp_io_result;    }  else    {      if (result > 0)        mb->wr_ptr (result);      JAWS_Event_Result tmp_io_result ( result                                      , JAWS_Event_Result::JE_OK                                      , JAWS_Event_Result::JE_RECV_OK                                      );      io_result = tmp_io_result;    }  if (completer)    completer->input_complete (io_result, act);}voidJAWS_Synch_IO::recv ( ACE_HANDLE handle                    , ACE_Message_Block *mb                    , JAWS_Event_Completer *completer                    , void *act                    ){  this->recv (handle, mb, completer, ACE_Time_Value::zero, act);}voidJAWS_Synch_IO::transmit ( ACE_HANDLE handle                        , ACE_HANDLE source                        , JAWS_Event_Completer *completer                        , const ACE_Time_Value &tv                        , void *act                        , ACE_Message_Block *header                        , ACE_Message_Block *trailer                        ){  JAWS_Event_Result io_result;  const ACE_Time_Value *tvp = 0;  if (ACE_Time_Value::zero < tv)    tvp = &tv;  size_t bytes = 0;  if (header)    {      io_result = JAWS_synch_send (handle, header, tvp);      bytes += io_result.bytes ();      if (io_result.status () != JAWS_Event_Result::JE_OK)        {          if (completer)            completer->input_complete (io_result, act);          return;        }    }  ACE_Message_Block buf (8 * 1024);  ssize_t len = 0;  while ((len = ACE::recv (source, buf.wr_ptr (), buf.space (), tvp)) >= 0)    {      if (len == 0)        break;      buf.wr_ptr (len);      io_result = JAWS_synch_send (handle, & buf);      bytes += io_result.bytes ();      if (io_result.status () != JAWS_Event_Result::JE_OK)        {          JAWS_Event_Result tmp_io_result ( bytes                                          , JAWS_Event_Result::JE_ERROR                                          , JAWS_Event_Result::JE_SEND_SHORT                                          );          if (completer)            completer->input_complete (tmp_io_result, act);          return;        }      buf.crunch ();    }  if (trailer)    {      io_result = JAWS_synch_send (handle, trailer, tvp);      bytes += io_result.bytes ();      if (io_result.status () != JAWS_Event_Result::JE_OK)        {          JAWS_Event_Result tmp_io_result ( bytes                                          , JAWS_Event_Result::JE_ERROR                                          , JAWS_Event_Result::JE_SEND_SHORT                                          );          if (completer)            completer->input_complete (tmp_io_result, act);          return;        }    }  if (len == 0)    {      JAWS_Event_Result tmp_io_result ( bytes                                      , JAWS_Event_Result::JE_OK                                      , JAWS_Event_Result::JE_SEND_OK                                      );      io_result = tmp_io_result;    }  else    {      JAWS_Event_Result tmp_io_result ( bytes                                      , JAWS_Event_Result::JE_ERROR                                      , JAWS_Event_Result::JE_SEND_SHORT                                      );      io_result = tmp_io_result;    }  if (completer)    completer->input_complete (io_result, act);}voidJAWS_Synch_IO::transmit ( ACE_HANDLE handle                        , ACE_HANDLE source                        , JAWS_Event_Completer *completer                        , void *act                        , ACE_Message_Block *header                        , ACE_Message_Block *trailer                        ){  this->transmit ( handle                 , source                 , completer                 , ACE_Time_Value::zero                 , act                 , header                 , trailer                 );}

⌨️ 快捷键说明

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