Здравствуйте, netch80, Вы писали:
N>Проблема широко известна. Был бы это Unix, можно было бы решить опциями приёма и отправки. N>Но на таких слабых API, как в Windows, единственный вариант — перебрав адреса на интерфейсах, создать на каждый адрес свой отдельный сокет. То есть в Вашем примере первый слушает на 192.168.0.10, второй — на 192.168.0.11 (и ещё один нужен, наверно, и на 127.0.0.1). API перебрать адреса на интерфейсах известно и доступно. Через какой сокет получен запрос, через такой и отправлять ответ.
N>Для сравнения, ISC named так делает (перебор адресов и по сокету на адрес) по умолчанию, не рассчитывая на конкретные флаворы (опции для этого в BSD, Linux и SysV взаимно несовместимы).
Это да, можно завести сокет для каждого ip. Но возникают неприятные моменты:
1. Нужно получить как-то все адреса. Пока не знаю как, но наверно решаемо. В принципе, можно заставить пользователя в конфиге перечислить все ip, пока это рабочий вариант.
2. В случае изменения настроек tcp/ip (добавление/удаление ip) нужно не забыть перестартовать сервис (сервер выполнен в виде win-сервиса).