Используя TCP, рабочий процесс для отправки данных следующий:
- open socket()
- write(data1)
- write(data2)
- write ... data n
- close(socket)
А как там с UDP? Мы держим розетку открытой? Или мы открываем сокет каждый раз, когда данные готовы? Какова наилучшая практика для этого?
- open socket();
- write(data1);
- close(socket);
- open socket();
- write(data2);
- close(socket);
Да, имеет смысл держать сокет открытым, если вам нужно больше отправить (или получить).
Открытие сокета TCP обычно означает
и закрытие сокета TCP означает
Открытие сокета UDP не запускает сетевую связь, а только создает структуру сокета в ОС.
Открытие сокета TCP обходится дороже, чем открытие сокета UDP, поскольку открытие и закрытие сокета TCP создает сеанс TCP, тогда как открытие и закрытие сокета UDP является только локальным действием.
Лучше всего повторно использовать существующий сокет UDP для отправки/получения более одной дейтаграммы. Бесполезно закрывать сокет UDP, если его можно повторно использовать для последующей связи. Более того, если приложение закроет сокет UDP, то входящий трафик на порт, привязанный к сокету, будет потерян.