Вы можете передать MSG_PEEK
в recvfrom
, чтобы точно определить, насколько большим должен быть буфер. Так что просто recvfrom
несколько байтов с MSG_PEEK
, чтобы найти numInt
, а затем recvfrom
реальную вещь (на этот раз без MSG_PEEK
).
Стандарт что-то говорит о MSG_PEEK
, но kernel.org лучше говорит:
MSG_PEEK
Этот флаг заставляет операцию приема возвращать данные из
начало очереди приема без удаления этих данных из
очередь. Таким образом, последующий приемный вызов вернет те же данные.
Очевидно, что в какой-то момент вы начнете задумываться, стоит ли удвоение количества системных вызовов для экономии памяти. Я думаю, что это не так.