de acordo com man 2 recv
recvmsg
pode devolver MSG_TRUNC
MSG_TRUNC
indicates that the trailing portion of a datagram was dis‐
carded because the datagram was larger than the buffer sup‐
plied.
porque às vezes queremos saber o tamanho do buffer que precisaríamos alocar MSG_TRUNC
também pode ser usado como um parâmetro no campo flags
MSG_TRUNC (since Linux 2.2)
For raw (AF_PACKET), Internet datagram (since Linux
2.4.27/2.6.8), netlink (since Linux 2.6.22), and UNIX datagram
(since Linux 3.4) sockets: return the real length of the
packet or datagram, even when it was longer than the passed
buffer.
a documentação também indica recvmsg
também pode retornar MSG_CTRUNC
MSG_CTRUNC
indicates that some control data were discarded due to lack of
space in the buffer for ancillary data.
e ainda não há como obter a extensão real dos dados auxiliares.
não deveria aceitar MSG_CTRUNC
para que possamos obter o tamanho real dos dados auxiliares?
Tags networking linux syscalls