设为首页 加入收藏

TOP

ACE_Stream中的recv_n和send_n
2014-11-24 14:14:39 来源: 作者: 【 】 浏览:0
Tags:ACE_Stream recv_n send_n

ACE_Stream中提供recv_n函数,该函数要求输入参数len表示要接受的字节数。


当代码中调用该函数时,程序会一直阻塞在recv_n函数调用的地方,只到recv_n对应的描叙符接收到了len个字节或者连接断开。


recv_n代码:


ACE::recv_n_i (ACE_HANDLE handle,
void *buf,
size_t len,
int flags,
size_t *bt)
{
size_t temp;
size_t &bytes_transferred = bt == 0 temp : *bt;
ssize_t n;


for (bytes_transferred = 0;
bytes_transferred < len;
bytes_transferred += n)
{
// Try to transfer as much of the remaining data as possible.
n = ACE_OS::recv (handle,
static_cast (buf) + bytes_transferred,
len - bytes_transferred,
flags);
// Check EOF.
if (n == 0)
return 0;


// Check for other errors.
if (n == -1)
{
// Check for possible blocking.
if (errno == EWOULDBLOCK)
{
// Wait for the blocking to subside.
int const result = ACE::handle_read_ready (handle, 0);


// Did select() succeed
if (result != -1)
{
// Blocking subsided. Continue data transfer.
n = 0;
continue;
}
}


// Other data transfer or select() failures.
return -1;
}
}


return static_cast (bytes_transferred);
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ACE中的定时器实现原理 下一篇Android 系统开发之背光

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: