Skip to content

Commit 4f7b8cc

Browse files
committed
非优雅方式同时支持ipv6与ipv4
1 parent dbf10c3 commit 4f7b8cc

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

dsserver/src/server.rs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::io::Read;
99
use std::io::Write;
1010
use std::net::TcpListener;
1111
use std::net::TcpStream;
12+
use std::sync::mpsc::channel;
1213

1314
pub fn run(port: u16, pwd: String) {
1415
let mut hasher = DefaultHasher::new();
@@ -24,10 +25,37 @@ pub fn run(port: u16, pwd: String) {
2425
(pk >> (1 * 8)) as u8,
2526
pk as u8,
2627
];
28+
let (tx4, rx) = channel::<TcpStream>();
29+
let tx6 = tx4.clone();
30+
std::thread::spawn(move || {
31+
let listener_ipv4 = TcpListener::bind(format!("0.0.0.0:{}", port)).unwrap();
32+
for sr in listener_ipv4.incoming() {
33+
match sr {
34+
Ok(stream) => {
35+
tx4.send(stream).unwrap();
36+
}
37+
Err(e) => {
38+
println!("error {}", e);
39+
}
40+
}
41+
}
42+
});
43+
std::thread::spawn(move || {
44+
let listener_ipv6 = TcpListener::bind(format!("[::0]:{}", port)).unwrap();
45+
for sr in listener_ipv6.incoming() {
46+
match sr {
47+
Ok(stream) => {
48+
tx6.send(stream).unwrap();
49+
}
50+
Err(e) => {
51+
println!("error {}", e);
52+
}
53+
}
54+
}
55+
});
2756

28-
let listener = TcpListener::bind(format!("0.0.0.0:{}", port)).unwrap();
29-
for sr in listener.incoming() {
30-
match sr {
57+
loop {
58+
match rx.recv() {
3159
Ok(mut stream) => {
3260
// 检查连接合法性
3361
let mut check = [0u8; 8];
@@ -57,8 +85,8 @@ pub fn run(port: u16, pwd: String) {
5785
th2.join().unwrap();
5886
println!("Break !");
5987
}
60-
Err(e) => {
61-
println!("error {}", e);
88+
Err(_) => {
89+
return;
6290
}
6391
}
6492
}

0 commit comments

Comments
 (0)