Indy 10 и настройка параметров розетки
Вопрос
Может быть, решение об этом очень просто, и я слишком глуп, чтобы увидеть это. Мне нужно перекомпилировать старое приложение с Indy 10, и эта линия раньше была
inUDPServer.Binding.SetSockOpt(Id_IPPROTO_IP, Id_IP_ADD_MEMBERSHIP, PChar(@mreq), SizeOf(mreq));
но новый Tidsockethandle.setsockopt берет 3 целых числа. Как я должен предоставить ip_mreq? Просто передавая IMR_MULTIADDR.S_ADDR приводит к ошибке #10014 - Buffer Fault. Может быть, у одного из вас, ребята, есть идея.
Ура Энди
Решение
Использовать TIdSocketHandle.AddMulticastMembership()
Вместо этого метод (если ваша версия Indy 10 не имеет этого метода, то вам сначала придется обновить более новый снимок), например:
inUDPServer.Binding.AddMulticastMembership('Group IP address');
Это добавляет TIdSocketHandle.IP
Адрес к членству указанной группы IP. IPS может быть указан как IPv4 или IPv6, в зависимости от настройки TIdSocketHandle.IPVersion
имущество.
В качестве альтернативы рассмотрите возможность использования TIdIPMCastServer
а также TIdIPMCastClient
компоненты вместо TIdUDPServer
напрямую.