Estoy trabajando en un servidor UDP creado con boost :: asio y comencé desde la personalización tutorial a mis necesidades. Cuando llamo al socket.receive_from(boost::asio::buffer(buf), remote, 0, error);
, llena mi búfer con los datos del paquete, pero, si mi comprensión es correcta, se descartan los datos que no quepan en el búfer. Las llamadas posteriores a receive_from recibirán el siguiente datagrama disponible, por lo que me parece que hay una pérdida de datos sin siquiera un aviso. ¿Estoy entendiendo esto de la manera incorrecta?¿Puede boost :: asio solo recibir datagramas UDP completos?
He intentado leer una y otra vez la documentación de boost :: asio, pero no pude encontrar pistas sobre cómo se supone que debo hacer esto de la manera correcta. Lo que me gustaría hacer es leer una cierta cantidad de datos para poder procesarlos; si leer un datagrama completo es la única manera, puedo hacerlo, pero ¿cómo puedo estar seguro de no perder los datos que estoy recibiendo? ¿Qué tamaño de búfer debo usar para estar seguro? ¿Hay alguna manera de decir que mi buffer es demasiado pequeño y estoy perdiendo información?
Tengo que asumir que puedo estar recibiendo enormes datagramas por diseño.
Eso es lo que pensé y solo necesitaba la confirmación de alguien con más experiencia en este tema. Hablé con el gerente de proyecto y me dio una estimación del tamaño máximo de los datagramas, aunque no hay un protocolo fijo. – Kjir