LINUX.ORG.RU

Непонятки с UDP сокетами


0

0

Клиент UPD работает по следующему алгоритму:

socket       // Создаём сокет
while(1)
{
  sendto     // Пишем датаграмму серверу
  recvfrom   // Читаем ответ от сервера
}

Сервер же, читая датаграмму от клиента, получает его адрес и порт
(через параметр в recvfrom).
Полученную информацию сервер использует при отправке ответа через
вызов sendto.

Вопрос:
Порт клиента является эфимерным (выделяется динамически).
Когда (после какого системного вызова) клиент получает этот порт?
Он выделяется на всё время работы клиента и никогда не освобождается
во время работы?
anonymous

man 7 udp says:

In order to receive packets the socket can be bound to an local address 
first by using bind(2).  
Otherwise the socket layer  will  automatically assign a free local port 
out of the range defined by net.ipv4.ip_local_port_range and bind the
socket to INADDR_ANY.

Исходя из этого можно сделать вывод, что порт назначается при вызове
sendto.

Т.е. bind выполняется неявно операцией ввода/вывода. Так?

anonymous
()
Ответ на: комментарий от anonymous

Я был прав.

Описание можно найти в параграфе 8.10 книги Стивенса.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.