Всегда ли необходимо связывать сокет? - PullRequest
9 голосов
/ 26 декабря 2011

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

1) Всегда ли необходимо связывать сокет для получения сообщения от этого? Я видел код сниффера (необработанный сокет), в котором он непосредственно вызывает recvfrom, и другой фрагмент кода, в котором он вызывает bind и затем получает.

2) В чем разница между семейством AF_ * и PF_ *? Позднее связано с POSIX? Какой из них рекомендуется?

Ответы [ 2 ]

9 голосов
/ 26 декабря 2011

Нет, вам не нужно связывать ().

Если вы используете сокет TCP или UDP, где вы планируете либо подключиться (), либо отправить пакет в пункт назначения с помощью sendto (), ядро ​​автоматически свяжет сокет с подходящим номером порта при попытке подключиться или отправить. Это вообще предпочтительный способ. Клиентские сокеты bind () считаются вредоносными.

То же самое относится и к сокетам AF_UNIX - клиентская сторона не должна связываться и не должна делать это нормально.

0 голосов
/ 26 декабря 2011

Я не знаю о Linux, но в Windows, если на несвязанном сокете вызывается recvfrom(), он завершится с ошибкой WSAEINVAL.

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