Pracuję na serwerze UDP zbudowanym z boost :: asio i zacząłem od tutorial dostosowując się do moich potrzeb. Gdy zadzwonię pod numer socket.receive_from(boost::asio::buffer(buf), remote, 0, error);
, wypełni mój bufor danymi z pakietu, ale jeśli moje zrozumienie jest poprawne, to spowoduje to utratę wszelkich danych, które nie mieszczą się w buforze. Kolejne wywołania receive_from dostaną następny dostępny datagram, więc wygląda na to, że utracono dane nawet bez powiadomienia. Czy rozumiem to w niewłaściwy sposób?Czy mogę :: asio otrzymywać tylko pełne datagramy UDP?
Próbowałem czytać w kółko po dokumentacji boost :: asio, ale nie udało mi się znaleźć wskazówek, jak mam to zrobić we właściwy sposób. Chciałbym przeczytać pewną ilość danych, aby móc je przetworzyć; jeśli czytanie całego datagramu jest jedyną drogą, mogę sobie z tym poradzić, ale jak mogę się upewnić, że nie stracę danych, które otrzymuję? Jakiego rozmiaru bufora powinienem używać, aby mieć pewność? Czy jest jakiś sposób, aby powiedzieć, że mój bufor jest za mały i tracę informacje?
Muszę założyć, że mogę otrzymywać ogromne datagramy według projektu.
Tak właśnie pomyślałem i potrzebowałem potwierdzenia od kogoś z większym doświadczeniem w tej kwestii. Rozmawiałem z kierownikiem projektu i dał mi oszacowanie maksymalnego rozmiaru datagramów, chociaż nie ma ustalonego protokołu. – Kjir