Вы правы в том, что происходит буферизация на уровне ОС, вы можете управлять размером буферов, используя методы API DatagramSocket.setRecieveBufferSize () и DatagramSocket.getRecieveBufferSize () .
Но
Также возможно потерять некоторые пакеты, так как ваши UDP-пакеты могут быть отброшены, если буфер переполнится или пакеты будут потеряны при передаче.Ведь UDP - это протокол без установления соединения.Если вам нужно убедиться, что все ваши пакеты безопасны и не повреждены, вы можете переключиться на TCP.
Возвращаясь к вашему вопросу, если так получится, что для выполнения callback.onDataReceived()
потребуется немного больше времени,отправитель перекачивает пакеты, и ваши буферы UDP заполняются, тогда вы можете начать терять пакеты