我试图加入一个KNX多播组(ip: 224.0.23.12;端口:3671),但接收一个OtherIoError。
套接字连接显示正常,因为我可以发送到多播组(由Wireshark检查)。当然,我只使用一个激活的网络接口进行测试,并尝试用127.0.0.1和本地IP地址替换local_addr。我的锈蚀版本是运行在Windows 7(64位)上的0.13.0-nightly (5ba610265 2014-12-25 18:01:36 +0000)。
类似的代码也适用于加入这个多播组的其他软件。
use std::io::net::udp::UdpSocket;
use std::io::net::ip::{Ipv4Addr, SocketAddr};
fn main() {
let local_addr = SocketAddr { ip: Ipv4Addr(0, 0, 0, 0), port: 3671 };
let mut socket = match UdpSocket::bind(local_addr) {
Ok(s) => s,
Err(e) => panic!("couldn't bind socket: {}", e),
};
match socket.join_multicast(Ipv4Addr(224, 0, 23, 12)) {
Err(why) => println!("! {}", why.kind),
Ok(_) => {},
};
drop(socket)
}发布于 2014-12-31 23:50:38
好吧,我想这是锈病。
这个Microsoft KB说:
请注意,这包括Winsock.h。如果该项目与Ws2_32.lib链接,则setsockopt将在运行时错误10042 (WSAENOPROTOOPT)中失败。这是因为在Winsock.h中,IP_ADD_MEMBERSHIP被定义为"5“。相应的Winsock运行时无法在IPPROTO_IP级别解析选项5,因此错误代码10042会发生故障。
锈蚀常数被定义为5和6,所以也许有人从某个地方抓取了错误的常量?我可能会为此申请一个正式的锈菌虫。
https://stackoverflow.com/questions/27725466
复制相似问题