我已经尝试过Network.Multicast包,它确实可以工作,但是,我找不到一种方法来为多播套接字指定本地绑定(bind)接口(interface)(“bond0”或“bond1”等)。我知道在C语言中,我需要使用ioctl将绑定(bind)转换为sockaddr_in结构,然后将此结构提供给setockopt的IPPROTO_IP系列下的IP_MULTICAST_IF选项,但是我不确定如何在Haskell中执行此操作。有人能帮忙吗?谢谢!

最佳答案

在网络多播[1]的源代码中,我看到了在setInterface函数中设置ip_multicast_if的调用。始终使用传入的主机字符串上的inet_addr的结果来调用它。

[1] http://hackage.haskell.org/packages/archive/network-multicast/0.0.6/doc/html/src/Network-Multicast.html

我可以想象,您需要编写自己的ffi绑定(bind)和函数来执行所需的操作。但是基于网络多播中的代码这样做应该很简单,而且我敢肯定,一旦您这样做,它将是对该库的欢迎补丁。

09-06 03:25