La mayoría de las funciones de recepción de datagramas, como c's recv o read, javas DatagramPacket class o pythons SocketServer, incluyen la posibilidad de conocer la cantidad de datos recibidos.¿Los datagramas siempre se reciben por completo?
c:
int amount = recv(sock, buf, n, MSG_WAITALL);
java:
int amount = datagramSocket.getLength();
pitón:
class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
amount = len (self.request[0])
Son estos fiable? ¿O es posible que solo se reciban partes del mensaje, debido, por ejemplo, a la fragmentación de paquetes o al retraso de la red?
En otras palabras: cuando envío un fragmento de longitud variable a través de udp y lo recibo en el otro extremo, ¿estos valores de cantidad son exactamente iguales al tamaño del fragmento original?
Edit:
ninjalj hizo un buen punto y quiero incluirlo aquí. ¿Qué sucede cuando se interrumpe la función de recepción, por ejemplo, mediante una señal? ¿Qué sucede cuando dos hilos intentan recibir simultáneamente desde el mismo zócalo?
solo fyi, su código java tiene una grave ortografía incorrecta de 'Longitud' – Necrolis