我已经做了一些测试。
您从socket
你必须open
它set_option
或get_option
之前。否则,您将收到错误“提供的文件句柄无效”。
关闭socket
并再次打开后,所有选项都会回到默认值。所以你需要在open
之后每次登录set_option
。我发现我做这件事的最好的地方在于传递给async_connect
的回调中。
实施例调用async_connect
:
socketPtr->async_connect(endpoint_iter->endpoint(),
boost::bind(&ConnectCallback,
shared_from_this(),
boost::asio::placeholders::error));
回调定义:
void ConnectCallback(const boost::system::error_code& ec)
{
if (!ec)
{
// Set options here
boost::asio::socket_base::linger optionLinger(true, 0);
socketPtr->set_option(optionLinger);
boost::asio::ip::tcp::no_delay optionNoDelay(true);
socketPtr->set_option(optionNoDelay);
// Do what you must with the socket now, for instance async_read_some
socketPtr->async_read_some(boost::asio::buffer(buffer, BUFFER_LENGTH),
boost::bind(&ReadCallback,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
}