📄 synch_io.cpp
字号:
// Synch_IO.cpp,v 1.2 2004/01/04 21:17:14 bala Exp
#include "ace/OS.h"
#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_Result
JAWS_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;
}
void
JAWS_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);
}
void
JAWS_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);
}
void
JAWS_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);
}
void
JAWS_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);
}
void
JAWS_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);
}
void
JAWS_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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -