Ключевые слова:socket, (найти похожие документы)
_ RU.UNIX (2:5077/15.22) _____________________________________________ RU.UNIX _
From : Eugene Crosser 2:5020/400 10 Aug 99 01:43:44
Subj : UDP bind
Referat : bind udp socket
________________________________________________________________________________
From: [email protected] (Eugene Crosser)
In article <[email protected]>,
"Maxim A.Shemanaryov" <[email protected]> writes:
> Открываю UDP-сокет и хочу в него послать датаграмму. Сокет работает
> только на передачу.
> Вопрос: Обязательно в _данном_случае_ ли делать bind?
> В Linux-e работает так: Если bind не делать, то на другом конце
> я получаю датаграмму с первым свободным номером порта, то есть,
> такое впечатление, что система сама назначает порт для посылки
> (как в TCP). В книжках везде рисуют один и тот же алгоритм с bind.
> Если же его делать, то это неудобно - второй экземпляр
> приложения с тем_же_самым портом говорит Can't bind socket
> (что и понятно). Итак, обязательно ли для отсылки (и только для отсылки)
> делать bind? Hасколько это переносимо в пределах Unix?
В манах (например, Солярисных) написано что все так и есть: если bind не
сделан, то локальный порт будет назначен системой, причем независимо от
протокола (tcp/udp/...). Hа самом деле это правда для IP протоколов,
и *неправда* для unix domain sockets. То есть через незаbindеный unix
domain послать датаграмму тоже можно, то при этом локальный адрес (в
данном случае имя) назначено *не* будет. То есть когда на том конце
возьмут адрес отправителя из recvfrom(), по этому адресу отправлять
ответ бесполезно, там мусор.
А для UDP документированное поведение действительно работает, то
есть можно не делать bind() перед sendto().
Eugene
--- ifmail v.2.14dev3 * Origin: Average (2:5020/400)