@@ -9,6 +9,7 @@ use std::io::Read;
99use std:: io:: Write ;
1010use std:: net:: TcpListener ;
1111use std:: net:: TcpStream ;
12+ use std:: sync:: mpsc:: channel;
1213
1314pub 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