This commit is contained in:
2024-10-09 18:08:29 +03:00
parent bd0654a8af
commit 5b50d714f7
4 changed files with 49 additions and 13 deletions

View File

@@ -450,23 +450,53 @@ public:
return;
}
auto buff = _streamBuffer.prepare(2880);
if constexpr (std::derived_from<socket_t,
asio::basic_stream_socket<typename socket_t::protocol_type>>) {
return asio::async_read(_socket, _streamBuffer, asio::transfer_at_least(1),
return asio::async_read(_socket, std::move(buff), asio::transfer_at_least(1),
std::move(self));
} else if constexpr (std::derived_from<socket_t, asio::basic_datagram_socket<
typename socket_t::protocol_type>>) {
// datagram, so it should be received at once
return _socket.receive(_streamBuffer, std::move(self));
return _socket.async_receive(std::move(buff), std::move(self));
} else if constexpr (std::derived_from<socket_t, asio::basic_seq_packet_socket<
typename socket_t::protocol_type>>) {
// datagram, so it should be received at once
return _socket.receive(_streamBuffer, *out_flags, std::move(self));
return _socket.async_receive(std::move(buff), *out_flags, std::move(self));
} else {
static_assert(false, "UNKNOWN ASIO-LIBRARY SOCKET TYPE!!!");
}
// if constexpr (std::derived_from<socket_t,
// asio::basic_stream_socket<typename socket_t::protocol_type>>)
// {
// return asio::async_read(_socket, _streamBuffer, asio::transfer_at_least(1),
// std::move(self));
// } else if constexpr (std::derived_from<socket_t, asio::basic_datagram_socket<
// typename socket_t::protocol_type>>) {
// // datagram, so it should be received at once
// return _socket.async_receive(_streamBuffer, std::move(self));
// } else if constexpr (std::derived_from<socket_t, asio::basic_seq_packet_socket<
// typename socket_t::protocol_type>>) {
// // datagram, so it should be received at once
// return _socket.async_receive(_streamBuffer, *out_flags, std::move(self));
// } else {
// static_assert(false, "UNKNOWN ASIO-LIBRARY SOCKET TYPE!!!");
// }
}
// zero-length message for SEQ_PACK sockets is EOF
if constexpr (std::derived_from<socket_t,
asio::basic_seq_packet_socket<typename socket_t::protocol_type>>) {
if (!nbytes) {
timer->cancel();
self.complete(std::make_error_code(std::errc::connection_aborted), std::move(msg));
return;
}
}
_streamBuffer.commit(nbytes);
// if (!nbytes) {
// do_read = true;
// asio::post(std::move(self)); // initiate consequence socket's read operation