Я пытаюсь присоединиться к многоадресной группе KNX (ip: 224.0.23.12; порт: 3671), но получаю OtherIoError
.Результаты UDP `join_multicast` в OtherIOError
Соединение сокета появляется ОК, так как я могу отправить в группу многоадресной передачи (проверено Wireshark). Разумеется, я тестировал только один сетевой интерфейс и пытался заменить local_addr на 127.0.0.1, а также локальный IP-адрес. Моя версия Rust - 0.13.0-nightly (5ba610265 2014-12-25 18:01:36 +0000)
работает под управлением Windows 7 (64 бит).
Аналогичный код работает в Go также с другим программным обеспечением, объединяющим эту группу многоадресной передачи.
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)
}
Я запустил этот код на OS X, и никаких ошибок не было. Возможно, это будет проблема, связанная с платформой? В стороне, вам не нужно 'drop (socket)' - сокет будет закрыт, как только переменная выходит за пределы области видимости. – Shepmaster
Если я изменяю 'why.kind' на' why', я получаю эту ошибку: 'OS Error 10042: неизвестный, недействительный или неподдерживаемый параметр или уровень был указан в вызове getsockopt или setsockopt.' – Shepmaster
Для всех, кто сталкивается этот вопрос в будущем, 'join_multicast' был [устарел] (https://doc.rust-lang.org/1.3.0/std/net/struct.UdpSocket.html#method.join_multicast), а затем удален из' std', а функциональность переместилась в ['join_multicast_v4'] (https://doc.rust-lang.org/net2-rs/net2/trait.UdpSocketExt.html#tymethod.join_multicast_v4) и [' join_multicast_v6'] (https : //doc.rust-lang.org/net2-rs/net2/trait.UdpSocketExt.html#tymethod.join_multicast_v6) в ящике ['net2'] (https://crates.io/crates/net2). –