Можно ли вызвать recvfrom () с MSG_PEEK и пустым буфером, просто для предварительного просмотра адреса? - PullRequest
0 голосов
/ 25 мая 2020

Это для UDP-сервера, где у меня есть фиксированное количество буферов пакетов на виртуальное соединение, чтобы ставить входящие пакеты в очередь для поддержания порядка следования.

Обычно, если я просто звоню recvfrom() I должен предоставить буфер, и после вызова я могу определить, от какого клиента он пришел. Чтобы сохранить буферы для каждого соединения, мне пришлось бы скопировать этот пакет в один из буферов для каждого соединения.

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

...