Это для UDP-сервера, где у меня есть фиксированное количество буферов пакетов на виртуальное соединение, чтобы ставить входящие пакеты в очередь для поддержания порядка следования.
Обычно, если я просто звоню recvfrom()
I должен предоставить буфер, и после вызова я могу определить, от какого клиента он пришел. Чтобы сохранить буферы для каждого соединения, мне пришлось бы скопировать этот пакет в один из буферов для каждого соединения.
Другая идея - вызвать recvfrom()
с установленным MSG_PEEK
, а не предоставить любой буфер. Я знаю, что MSG_PEEK
сохранит пакет доступным для следующего вызова recvfrom()
, когда я буду знать, какой буфер ему предоставить. Но допустимо ли вызывать recvfrom()
с нулевым буфером? Будет ли это делать так, как я ожидал, и просто заполнить адрес, или я рискую неопределенным поведением? Ни в одной из документов, которые я читал, эта возможность не упоминается. тем лучше.