我已經做了一些測試。
您從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));
}
}