Se por "mensagem" você quer dizer "datagrama", a resposta é 100%. Os datagramas UDP são enviados ou não e chegam ou não. Você nunca deve recvfrom()
apenas parte de um datagrama UDP. Se o datagrama acabar sendo maior que o MTU da rede, ele pode estar fragmentado na camada IP, mas qualquer fragmento descartado resultará na eliminação total do datagrama e não em uma mensagem parcial.
A velocidade do loopback não é infinita: é limitada pela CPU. Se você enviar dados muito rapidamente, o buffer de saída do UDP será preenchido. Então, quando você tentar sendto()
um datagrama que é muito grande para caber no espaço de buffer restante, você receberá um erro como EAGAIN
, ENOBUFS
ou EMSGSIZE
, dependendo da implementação. Se o receptor chamar recvfrom()
lentamente, seu buffer de entrada será preenchido e os datagramas serão silenciosamente descartados.
Uma questão mais relevante é a porcentagem de datagramas enviados que são realmente recebidos. Em taxas bem abaixo da saturação da CPU, isso deve ser 100% no loopback. Mas quando se aproxima a saturação da CPU, ou se o receptor está lento na leitura dos datagramas, ele pode se tornar arbitrariamente baixo.