0

问题是当我调用asio socket函数close()关闭socket时,之前发送的数据都丢失了!</p>

4

1 回答 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 回答