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 错误 - 缓冲区故障。 也许你们中的一个人有一个想法。
干杯安迪
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请使用
TIdSocketHandle.AddMulticastMembership()
方法(如果您的 Indy 10 版本没有该方法可用,那么您必须首先更新到较新的快照),例如:它添加了
TIdSocketHandle.IP
地址指定组 IP 的成员资格。 IP 可以指定为 IPv4 或 IPv6,具体取决于TIdSocketHandle.IPVersion
属性的设置。或者,考虑使用
TIdIPMCastServer
和TIdIPMCastClient
组件,而不是直接使用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: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 theTIdSocketHandle.IPVersion
property.Alternatively, consider using the
TIdIPMCastServer
andTIdIPMCastClient
components instead ofTIdUDPServer
directly.