问题是当我调用asio socket函数close()关闭socket时,之前发送的数据都丢失了!</p>
问问题
260 次
1 回答
1
为了确保在调用之前写入close
所有数据,您应该使用 io_service 的事件循环。
以 asio 的聊天客户端为例说明如何操作:
void write(const chat_message& msg)
{
io_service_.post(boost::bind(&chat_client::do_write, this, msg));
}
void close()
{
io_service_.post(boost::bind(&chat_client::do_close, this));
}
通过post
对事件循环进行实际写入,您正在委派确保一切以正确顺序发生的工作。
如果您想在关闭套接字之前确保远程端点已收到所有内容,则需要构建某种协议,即让远程端点发送一条消息来确认。
于 2012-06-03T01:46:04.707 回答