Держать сокет открытым для UDP? - PullRequest
1 голос
/ 22 мая 2019

При использовании 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);

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Открытие сокета TCP обычно означает

  • создание структуры сокета в операционной системе
  • установление соединения TCP (трехстороннее рукопожатие с партнером)

и закрытие сокета TCP означает

  • освобождение соединения TCP
  • удаление структуры сокета в операционной системе

Открытие сокета UDP не запускает сетьсвязь, и это только создает структуру сокетов в ОС.

Открытие сокета TCP обходится дороже, чем открытие сокета UDP, потому что открытие и закрытие сокета TCP создает сеанс TCP, тогда как открытие и закрытие сокета UDP является локальнымтолько действие.

Рекомендуется повторно использовать существующий сокет UDP для отправки / получения более одной дейтаграммы.Бесполезно закрывать сокет UDP, если его можно использовать повторно для последующей связи.Более того, если приложение закроет сокет UDP, входящий трафик на порт, связанный с сокетом, будет потерян.

0 голосов
/ 22 мая 2019

Да, имеет смысл держать сокет открытым, если вам нужно больше отправлять (или получать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...