58 connect(
const typename Protocol::endpoint& endpoint)
70 m_connectTimer.async_wait([self = this->shared_from_this()] (
const auto& ec) {
74 self->m_transport.close();
76 "could not connect to NDN forwarder at " +
77 boost::lexical_cast<std::string>(self->m_endpoint)));
80 m_socket.async_connect(
m_endpoint, [self = this->shared_from_this()] (
const auto& ec) {
81 self->connectHandler(ec);
187 m_socket.async_receive(boost::asio::buffer(m_rxBuffer.data() + m_rxBufferSize,
188 m_rxBuffer.size() - m_rxBufferSize),
190 [
this, self = this->shared_from_this()] (
const auto& error,
size_t nBytesRecvd) {
192 if (error == boost::asio::error::operation_aborted) {
197 NDN_THROW(Transport::Error(error,
"socket read error"));
200 m_rxBufferSize += nBytesRecvd;
201 auto unparsedBytes = make_span(m_rxBuffer).first(m_rxBufferSize);
202 while (!unparsedBytes.empty()) {
207 unparsedBytes = unparsedBytes.subspan(element.size());
208 m_transport.m_receiveCallback(element);
211 if (unparsedBytes.empty()) {
215 else if (unparsedBytes.data() != m_rxBuffer.data()) {
217 std::copy(unparsedBytes.begin(), unparsedBytes.end(), m_rxBuffer.begin());
218 m_rxBufferSize = unparsedBytes.size();
220 else if (unparsedBytes.size() == m_rxBuffer.size()) {