@@ -9,6 +9,7 @@ use std::io::Read;
9
9
use std:: io:: Write ;
10
10
use std:: net:: TcpListener ;
11
11
use std:: net:: TcpStream ;
12
+ use std:: sync:: mpsc:: channel;
12
13
13
14
pub fn run ( port : u16 , pwd : String ) {
14
15
let mut hasher = DefaultHasher :: new ( ) ;
@@ -24,10 +25,37 @@ pub fn run(port: u16, pwd: String) {
24
25
( pk >> ( 1 * 8 ) ) as u8 ,
25
26
pk as u8 ,
26
27
] ;
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
+ } ) ;
27
56
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 ( ) {
31
59
Ok ( mut stream) => {
32
60
// 检查连接合法性
33
61
let mut check = [ 0u8 ; 8 ] ;
@@ -57,8 +85,8 @@ pub fn run(port: u16, pwd: String) {
57
85
th2. join ( ) . unwrap ( ) ;
58
86
println ! ( "Break !" ) ;
59
87
}
60
- Err ( e ) => {
61
- println ! ( "error {}" , e ) ;
88
+ Err ( _ ) => {
89
+ return ;
62
90
}
63
91
}
64
92
}
0 commit comments