Видимо setsockopt
и IP_MULTICAST_IF
не работают, если вместо ws2_32.dll
используется wsock32.dll
.Я думал, что делал это неправильно, когда продолжал получать 1.0.0.0
в качестве IP-адреса, даже когда это было что-то еще, что я установил с помощью setsockopt.Забавно, что перед вызовом IP_MULTICAST_IF
он вернул бы 0.0.0.0
, так что setsockopt` что-то изменил, но не правильно.
Кто-то еще, у которого была такая же проблема еще в 2004 году - http://us.generation -nt.com / IP многоадресной проблемно-помощь-37595922.html .Когда мы #include "winsock2.h"
нам нужно использовать ws2_32.dll
.Однако в C ++ Builder невозможно использовать ws2_32.dll
, когда мы используем winsock2.h
- RTL неявно ссылается на wsock32.dll, и вы не можете связать ws2_32.dll, даже если вы явно указали #pragma comment(lib, "ws2_32.lib")
.Embarcadero действительно нужно исправить это!Кто-то из команды RTL, должно быть, решил, что умный неявно включает wsock32.dll.Единственное, что он сделал 'умный' , это то, что пользователям не нужно было включать в свой код одну строку - #pragma comment(lib, "wsock32.lib")
.Несмотря на это, они также могут включать все DLL-файлы, известные человечеству.