Indy 10 和设置套接字选项

发布于 2024-10-12 14:31:25 字数 335 浏览 3 评论 0原文

也许解决这个问题的方法很简单,只是我太笨了,看不到它。 我需要使用 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 错误 - 缓冲区故障。 也许你们中的一个人有一个想法。

干杯安迪

Maybe the solution to this is very simple and I'm just too dumb to see it.
I need to recompile an old application with Indy 10 and there's this line that used to be

inUDPServer.Binding.SetSockOpt(Id_IPPROTO_IP, Id_IP_ADD_MEMBERSHIP, PChar(@mreq), SizeOf(mreq));

but the new TIdSocketHandle.SetSockOpt takes 3 integers.
Now how am I supposed to provide the ip_mreq? Just passing the imr_multiaddr.S_addr results in an #10014 Error - Buffer fault.
Maybe one of you guys has an idea.

Cheers Andy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心的位置 2024-10-19 14:31:25

请使用 TIdSocketHandle.AddMulticastMembership() 方法(如果您的 Indy 10 版本没有该方法可用,那么您必须首先更新到较新的快照),例如:

inUDPServer.Binding.AddMulticastMembership('Group IP address');

它添加了 TIdSocketHandle.IP 地址指定组 IP 的成员资格。 IP 可以指定为 IPv4 或 IPv6,具体取决于 TIdSocketHandle.IPVersion 属性的设置。

或者,考虑使用 TIdIPMCastServerTIdIPMCastClient 组件,而不是直接使用 TIdUDPServer

Use the TIdSocketHandle.AddMulticastMembership() method instead (if your version of Indy 10 does not have that method available, then you will have to update to a newer snapshot first), eg:

inUDPServer.Binding.AddMulticastMembership('Group IP address');

It adds the TIdSocketHandle.IP address to the membership of the specified Group IP. IPs can be specified as either IPv4 or IPv6, depending on the setting of the TIdSocketHandle.IPVersion property.

Alternatively, consider using the TIdIPMCastServer and TIdIPMCastClient components instead of TIdUDPServer directly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文