Для клиента (TCP) или отправителя (UDP) вызов bind()
не является обязательным; это способ указать интерфейс. Предположим, у вас есть два интерфейса, оба из которых маршрутизируются к месту назначения:
eth0: 10.1.1.100/24
eth1: 10.2.2.100/24
route: 10.1.1.0/24 via 10.2.2.254 # router for eth1
0.0.0.0 via 10.1.1.254 # general router
Теперь, если вы просто скажете от connect()
до 12.34.56.78
, вы не знаете, какой локальный интерфейс обеспечивает локальную сторону соединения. Позвонив сначала по номеру bind()
, вы сделаете это конкретно.
То же самое верно для UDP-трафика: без bind()
ing ваш sendto()
будет использовать случайный адрес источника и порт, но с bind()
вы сделаете источник специфичным.