修复连接tcp地址的问题
This commit is contained in:
+2
-13
@@ -1,8 +1,8 @@
|
||||
use std::collections::HashMap;
|
||||
use std::io;
|
||||
use std::net::TcpStream;
|
||||
use std::net::UdpSocket;
|
||||
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
|
||||
use std::net::{SocketAddrV6, TcpStream};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
@@ -581,7 +581,7 @@ impl Config {
|
||||
token: String,
|
||||
device_id: String,
|
||||
name: String,
|
||||
mut server_address: SocketAddr,
|
||||
server_address: SocketAddr,
|
||||
server_address_str: String,
|
||||
mut stun_server: Vec<String>,
|
||||
in_ips: Vec<(u32, u32, Ipv4Addr)>,
|
||||
@@ -606,17 +606,6 @@ impl Config {
|
||||
x.push_str(":3478");
|
||||
}
|
||||
}
|
||||
match server_address {
|
||||
SocketAddr::V4(ipv4) => {
|
||||
server_address = SocketAddr::V6(SocketAddrV6::new(
|
||||
ipv4.ip().to_ipv6_mapped(),
|
||||
ipv4.port(),
|
||||
0,
|
||||
0,
|
||||
))
|
||||
}
|
||||
SocketAddr::V6(_) => {}
|
||||
}
|
||||
Self {
|
||||
tap,
|
||||
token,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use std::net::SocketAddr;
|
||||
use std::net::{SocketAddr, SocketAddrV6};
|
||||
|
||||
use crate::channel::channel::Context;
|
||||
use crate::channel::RouteKey;
|
||||
@@ -168,6 +168,16 @@ fn send_recv(
|
||||
}
|
||||
Ok(len)
|
||||
} else {
|
||||
let server_address = if let SocketAddr::V4(ipv4) = server_address {
|
||||
SocketAddr::V6(SocketAddrV6::new(
|
||||
ipv4.ip().to_ipv6_mapped(),
|
||||
ipv4.port(),
|
||||
0,
|
||||
0,
|
||||
))
|
||||
} else {
|
||||
server_address
|
||||
};
|
||||
if let Err(e) = main_channel.send_to(send_buf, server_address) {
|
||||
return Err(HandshakeEnum::Other(format!("send error:{}", e)));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use std::io;
|
||||
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV6, ToSocketAddrs};
|
||||
use std::net::{Ipv4Addr, ToSocketAddrs};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
@@ -138,17 +138,9 @@ async fn start_heartbeat_main_(
|
||||
let src = current_dev.virtual_ip();
|
||||
if count % 40 == 19 {
|
||||
if let Ok(mut addr) = server_address_str.to_socket_addrs() {
|
||||
if let Some(mut addr) = addr.next() {
|
||||
if let Some(addr) = addr.next() {
|
||||
if addr != current_dev.connect_server {
|
||||
let mut tmp = current_dev.clone();
|
||||
if let SocketAddr::V4(ipv4) = addr {
|
||||
addr = SocketAddr::V6(SocketAddrV6::new(
|
||||
ipv4.ip().to_ipv6_mapped(),
|
||||
ipv4.port(),
|
||||
0,
|
||||
0,
|
||||
))
|
||||
}
|
||||
tmp.connect_server = addr;
|
||||
log::info!(
|
||||
"服务端地址变化,旧地址:{},新地址:{}",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crossbeam_utils::atomic::AtomicCell;
|
||||
use std::io::{Read, Write};
|
||||
use std::net::{Ipv4Addr, SocketAddr};
|
||||
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV6};
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use crate::channel::sender::ChannelSender;
|
||||
@@ -82,6 +82,15 @@ pub fn registration(
|
||||
}
|
||||
&mut recv_buf[4..len]
|
||||
} else {
|
||||
let server_address = match server_address {
|
||||
SocketAddr::V4(ipv4) => SocketAddr::V6(SocketAddrV6::new(
|
||||
ipv4.ip().to_ipv6_mapped(),
|
||||
ipv4.port(),
|
||||
0,
|
||||
0,
|
||||
)),
|
||||
SocketAddr::V6(_) => server_address,
|
||||
};
|
||||
if let Err(e) = main_channel.send_to(buf, server_address) {
|
||||
return Err(ReqEnum::Other(format!("send error:{}", e)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user