Typically, (certianly on Windows/Linux), a datagram is truncated to fit into the passed buffer and the remaining data is lost permanently.
Is there a way to ensure that entire datagrams are read regardless of their size?
Use a 64K buffer. The UDP protocol ensures that datagrams cannot be larger than that, so all datagrams succesfully received will be read completely regardless of their size.