Giriş
Bu metodun tam 4 tane overload edilmiş hali mevcut. Alltaki soketin async_read_some metodunu kullanır. İşlem sonunda delimeter da okunan buffer'a dahildir.
asyn_read_until - socket + streambuf + delimeter + handler
İmzası şöyle
Elimizde bir streambuf olsun.
Şöyle yaparız.
Bu metodun tam 4 tane overload edilmiş hali mevcut. Alltaki soketin async_read_some metodunu kullanır. İşlem sonunda delimeter da okunan buffer'a dahildir.
asyn_read_until - socket + streambuf + delimeter + handler
İmzası şöyle
void-or-deduced async_read_until(
AsyncReadStream & s,
boost::asio::basic_streambuf< Allocator > & b,
char delim,
ReadHandler handler);
Şöyle yaparız.boost::asio::async_read_until(socket, streamBuf, "\r\n\r\n", read_handler);
read_handler şöyledir
void read_handler (boost::system::error_code ec, std::size_t nr)
{
...
if (ec) {
...
} else {
...
}
}
read_handler için lambda kullanmak istersek şöyle yaparız.async_read_until(socket,streamBuf,delim,
[](const system::e_code& ec, std::size_t bytes_transferred){
...
if (ec != 0) {
std::cout << ec.message() << " (" << ec.value() << ") " << std::endl;
return;
}
...
});
async_read_until - socket + streambuf + delimeter + yieldElimizde bir streambuf olsun.
boost::asio::streambuf streamBuf;
Şöyle yaparız. Burada yield ne işe yarıyor bilmiyorumsize_t bytes = 0;
bool eof = false;
try {
bytes = boost::asio::async_read_until(as_stdin, streamBuf, '\n', yield);
} catch(std::exception const& e) {
std::cerr << "Exception: " << e.what() << "\n";
bytes = 0;
eof = true;
}
if (eof) break;
async_read_until - socket + streambuf + delimeter + error_codeŞöyle yaparız.
boost::system::error_code ec;
auto bytes = boost::asio::async_read_until(as_stdin, streamBuf, '\n', yield[ec]);
if (ec) {
...
}
Hiç yorum yok:
Yorum Gönder