В некоторых случаях я хотел бы явно отказаться от пакетов, ожидающих в сокете, с минимальными накладными расходами. Кажется, нет никакого явного «drop udp buffer» системного вызова, но, может быть, я ошибаюсь?Отказывать входящий пакет UDP без чтения
Следующим лучшим способом может быть, вероятно, recv
пакет во временный буфер и просто отказаться от него. Кажется, я не могу получить 0 байт, так как человек говорит о recv
: The return value will be 0 when the peer has performed an orderly shutdown.
Итак, 1 - это минимум в этом случае.
Есть ли другой способ справиться с этим?
На всякий случай - это не преждевременная оптимизация. Единственное, что делает этот сервер, - это пересылка/отправка пакетов UDP определенным образом - хотя recv
с len=1
не убьет меня, я бы скорее просто отбросил всю очередь за один раз с какой-то определенной функцией (надеюсь, задержка).
Какие критерии вы используете, чтобы решить, что отказаться? –
Не уверен, что я могу сказать здесь, поэтому имеет смысл ... в основном две стороны объявляют (с некоторым общим файлом cookie), что им нужен прокси. Сервер должен открыть сокет после первого запроса, чтобы убедиться, что порт не используется кем-либо еще. Пока установка не будет завершена, мне нужно отбросить пакеты, иначе они будут поставлены в очередь и повторно отправлены позже - это очень плохо в моем сценарии. Таким образом, в основном у меня есть внутренний флаг для каждого соединения, которое говорит - отбросьте все или переместите все. – viraptor