Как сокеты обрабатывают изменения локальных адресов? - PullRequest
0 голосов
/ 14 октября 2018

В C я могу привязать клиентский сокет к определенному локальному адресу и выбранному системой порту.Что произойдет, если произойдет что-либо из следующего:

  1. Локальный адрес машины изменился
  2. Программа перемещена на хост с другим локальным адресом

А что будет, если я попытаюсь выполнить привязку после вызова connect ()?

1 Ответ

0 голосов
/ 14 октября 2018

Ну, в общем, соединение сокета TCP действительно идентифицируется по IP-адресу источника, порту источника, IP-адресу назначения, кортежу порта назначения.Если, скажем, исходный IP-адрес больше не действителен, то ни один конец не сможет восстановить его, и хост-получатель, вероятно, не заметит это до истечения времени ожидания.

Если, с другой стороны, вы пытаетесь привязать адресв то время это не локально, системный вызов bind должен возвращать ошибку (EADDRNOTAVAIL).

Наконец, повторное связывание подключенного сокета TCP должно привести к ошибке, потому что это не имеет никакого смысла.

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