Здравствуйте, KaktusAgava, Вы писали:
KA>Все хорошо работает, но возникает проблемка, когда в свойствах TCP/IP прописано несколько IP адресов. Т.е. их, например, два: 192.168.0.10 и 192.168.0.11.
KA>Когда клиент шлет запрос UDP-серверу на IP 192.168.0.10, то респонз обратно шлется с того же IP и все работает хорошо.
KA>А вот когда клиент шлет запрос га IP 192.168.0.11, то респонз обратно шлется с IP 192.168.0.10 и клиент его не видит.
KA>Не подскажете, если кто сталкивался, как это можно побороть? У WSASendTo нету к сож. параметра-ip с которого слать
KA>У него есть только сокет,который слушает все интерфейсы (INADDR_ANY). Надо сделать так, чтобы ответ отправлялся с того же ip, на который пришел запрос.
Проблема широко известна. Был бы это Unix, можно было бы решить опциями приёма и отправки.
Но на таких слабых API, как в Windows, единственный вариант — перебрав адреса на интерфейсах, создать на каждый адрес свой
отдельный сокет. То есть в Вашем примере первый слушает на 192.168.0.10, второй — на 192.168.0.11 (и ещё один нужен, наверно, и на 127.0.0.1). API перебрать адреса на интерфейсах известно и доступно. Через какой сокет получен запрос, через такой и отправлять ответ.
Для сравнения, ISC named так делает (перебор адресов и по сокету на адрес) по умолчанию, не рассчитывая на конкретные флаворы (опции для этого в BSD, Linux и SysV взаимно несовместимы).