3
在TCP发送数据流时候,往往需要发送比较大的缓冲区块,这时候,我们需要一个循环处理发送函数,略微封装了一下,有需要的可以直接使用。这是linux版本,windows下面略作修改即可

转载注明出处即可。

Tags: , , | 引用(0)
路过
2009/06/15 12:24
这种发送方式只能保证来把消息发送出去,通过多次发送。但不利于并发操作,不太适合服务器。操作cout << "busy
now ...." << endl;在发送过程中被执行了好多次。而其他消息得不到处理。我的处理方式是和epoll结合:
# if(errno == EAGAIN  
#                     || errno == EINTR)  
#             {  
#                 //记录当前未发完消息的状态,继续处理其他消息。等待 EPOLLOUT的返回(意味着发送缓冲区可写),再
继续发送那个未完的消息。
#             }
Viruskiller Email Homepage
2009/04/23 15:49
我使用了如下的方式,也不是阻塞,是异步多路中使用的,效率要高一些,相信您能看懂:
std::string m_SendStoreBuf;
std::string m_SendingBuf;
std::string m_SendingBegin;

当m_SendingBegin == m_SendingBuf.size();时
m_SendStoreBuf.swap(m_SendingBuf);
m_SendStoreBuf.clear();
m_SendingBegin = 0;

逻辑代码发送时只是 m_SendStoreBuf += Data;
huzhangyou2002 回复于 2009/04/23 17:47
验证中。思路不错,感谢
skeeter
2009/02/24 10:48
这个函数里面为什么要有count这个参数呢?
huzhangyou2002 回复于 2009/02/24 12:41
这个参数可以直接使用sendbuff.size()但是有时候需要控制 并不是发送sendbuff的全部数据,可以通过这里来控制
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]