Kernel: Set message flags in UDP and TCP recvmsg
This commit is contained in:
parent
c1e2c660bf
commit
bb86520094
|
|
@ -214,6 +214,8 @@ namespace Kernel
|
||||||
TRY(Thread::current().block_or_eintr_indefinite(m_thread_blocker, &m_mutex));
|
TRY(Thread::current().block_or_eintr_indefinite(m_thread_blocker, &m_mutex));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message.msg_flags = 0;
|
||||||
|
|
||||||
size_t total_recv = 0;
|
size_t total_recv = 0;
|
||||||
for (int i = 0; i < message.msg_iovlen; i++)
|
for (int i = 0; i < message.msg_iovlen; i++)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -120,12 +120,17 @@ namespace Kernel
|
||||||
|
|
||||||
auto* packet_buffer = reinterpret_cast<uint8_t*>(m_packet_buffer->vaddr());
|
auto* packet_buffer = reinterpret_cast<uint8_t*>(m_packet_buffer->vaddr());
|
||||||
|
|
||||||
|
message.msg_flags = 0;
|
||||||
|
|
||||||
size_t total_recv = 0;
|
size_t total_recv = 0;
|
||||||
for (int i = 0; i < message.msg_iovlen; i++)
|
for (int i = 0; i < message.msg_iovlen; i++)
|
||||||
{
|
{
|
||||||
const size_t nrecv = BAN::Math::min<size_t>(message.msg_iov[i].iov_len, packet_info.packet_size - total_recv);
|
const size_t nrecv = BAN::Math::min<size_t>(message.msg_iov[i].iov_len, packet_info.packet_size - total_recv);
|
||||||
memcpy(message.msg_iov[i].iov_base, packet_buffer + total_recv, nrecv);
|
memcpy(message.msg_iov[i].iov_base, packet_buffer + total_recv, nrecv);
|
||||||
total_recv += nrecv;
|
total_recv += nrecv;
|
||||||
|
|
||||||
|
if (nrecv < packet_info.packet_size)
|
||||||
|
message.msg_flags |= MSG_TRUNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
memmove(
|
memmove(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue