【发布时间】:2016-07-05 09:55:47
【问题描述】:
下面的代码安全吗?
boost::asio::io_service io_service;
auto socket(new std::unique_ptr<boost::asio::tcp::socket>(io_service);
.
.
.
boost::asio::async_read(*socket, buffer, handler);
socket.reset();
或者我是否需要等待处理程序运行才能删除套接字?
也将使用socket->async_receive(...) 来代替任何区别
我在 windows 和 linux 上都对此感兴趣。
【问题讨论】:
-
执行
socket-recv()将导致您的调用线程阻塞,直到您在套接字上收到消息...这也可能永远不会发生。 -
@Arunmu 哎呀,将 recv 更改为 async_receive
-
我认为这不是一个好主意。为什么要在该套接字上发生(可能)读取之前关闭套接字?您可以在读取处理程序中关闭套接字或设置超时,其中您在套接字上执行
cancel然后关闭它。 -
@Arunmu 用例是应用程序关闭。
-
嗯..这又提出了另一个问题,您是否希望套接字在整个运行时处于活动状态并且仅在关闭期间关闭?似乎更像是拥有创建套接字的析构函数的工作。
标签: c++ linux windows boost-asio