2012-05-26 14 views
12

मैं इस कोड का उपयोग कर रहा बारे में पढ़नेstreambuf उपयोग asio पढ़ सकते हैं और

socket_.async_read_some(boost::asio::buffer(data_, max_length), 
     boost::bind(&session::handle_read, this, 
     boost::asio::placeholders::error, 
     boost::asio::placeholders::bytes_transferred)); 

के लिए और इस

boost::asio::async_write(socket_, 
    boost::asio::buffer(data_, bytes_transferred), 
    boost::bind(&session::handle_write, this, 
    boost::asio::placeholders::error)); 

जहां socket_ है सॉकेट, MAX_LENGTH enum मान 1024 के साथ है लिखने के लिए और data_ अधिकतम सरणी की लंबाई के साथ चार सरणी है।

लेकिन मैं स्ट्रीमबफ के साथ चार सरणी बफर को प्रतिस्थापित करना चाहता हूं। मैंने

boost::asio::streambuf streamBuffer; 
    socket_.async_read_some(boost::asio::buffer(streamBuffer), 
     boost::bind(&session::handle_read, this, 
     boost::asio::placeholders::error, 
     boost::asio::placeholders::bytes_transferred)); 

लेकिन काम नहीं कर रहा है। मैं यह कैसे कर सकता हूं ?

उत्तर

12

streambuf से पर अपना पहला पैरामीटर के रूप में उपयोग करने के लिए आपको mutable_buffers_type प्राप्त करने की आवश्यकता है।

boost::asio::streambuf streamBuffer; 
    boost::asio::streambuf::mutable_buffers_type mutableBuffer = 
     streamBuffer.prepare(max_length); 
    socket_.async_read_some(boost::asio::buffer(mutableBuffer), 
     boost::bind(&session::handle_read, this, 
     boost::asio::placeholders::error, 
     boost::asio::placeholders::bytes_transferred)); 

asio प्रलेखन here और here अधिक जानकारी के लिए देखें।

संबंधित मुद्दे