Как динамически выделить буфер для приема сокета UDP (VB.Net) - PullRequest
0 голосов
/ 21 февраля 2010

Мы с другом работаем над проектом, в котором нам необходимо создать надежный UDP-клиент / сервер с использованием VB.Net. У нас все работает хорошо, но одна вещь, которая все еще ускользает от нас, - это как динамически выделить (байтовый) буфер для входящих данных. Прямо сейчас мы должны жестко закодировать максимальное значение / MTU (или использовать действительно большой размер буфера и изменить его размер, как только мы закончим получать). Кто-нибудь знает, как это можно сделать без указания размера буфера приема?

По сути, перед вызовом функции приема в сокете с буфером размера x мы хотим узнать x, чтобы мы могли выделить буфер соответствующего размера. Возможно, это проблема во всем программировании сокетов, с которой вам просто приходится иметь дело ??

1 Ответ

1 голос
/ 21 февраля 2010

Это одна из проблем, которую вам придется взять на себя, когда вы используете UDP. Вам нужно будет рассмотреть Path MTU discovery . Опять же, поскольку вы создаете надежный UDP, вы должны иметь возможность автоматически обнаруживать это и динамически переключаться на меньший размер пакета. Это также решит проблемы PMTUD.

Надеюсь, это звучит не так, как: «те, кто не использует TCP, обречены заново его изобретать» Проверьте RFC, которые связаны в той статье для идей.

...