gpt4 book ai didi

sockets - UdpSocket.send_to 失败,返回 "invalid argument"

转载 作者:行者123 更新时间:2023-11-29 07:57:55 24 4
gpt4 key购买 nike

我在使用 Rust 试验 BitTorrent 跟踪器协议(protocol)时遇到了这个问题。

这个应该使用 UDP 套接字发送一些数据的简单程序失败了:

use std::collections::HashSet;
use std::io::net::addrinfo;
use std::io::net::ip::{Ipv4Addr, SocketAddr, IpAddr};
use std::io::net::udp::UdpSocket;

fn main() {
let addr = SocketAddr { ip: Ipv4Addr(127, 0, 0, 1), port: 34254 };
let mut socket = match UdpSocket::bind(addr) {
Ok(s) => s,
Err(e) => panic!("couldn't bind socket: {}", e),
};

let host_addr = "tracker.openbittorrent.com";
let port = "80";

let host_ips: HashSet<IpAddr> =
addrinfo::get_host_addresses(host_addr.as_slice()).unwrap().into_iter().collect();

for host_ip in host_ips.into_iter() {
let socket_addr = SocketAddr {
ip: host_ip,
port: from_str(port).unwrap(),
};
println!("Sending to {}", socket_addr);
let data: &[u8] = [0x1, 0x2, 0x3];
println!("{}", socket.send_to(data, socket_addr));
}
}

输出:

Sending to 31.172.63.252:80
Err(invalid argument (Invalid argument))
Sending to 31.172.63.253:80
Err(invalid argument (Invalid argument))

有什么问题吗?

最佳答案

您正在将套接字绑定(bind)到本地主机(环回接口(interface)),然后尝试通过该套接字与不在该接口(interface)上的地址进行通信。如果您改为绑定(bind)到 0.0.0.0,它将成功。这意味着“所有 ipv4 接口(interface)”。如有必要,您可以绑定(bind)到更具体的地址。

关于sockets - UdpSocket.send_to 失败,返回 "invalid argument",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com