@@ -6,15 +6,17 @@ use crate::{
66 proxy:: {
77 inbound:: InboundHandlerTrait ,
88 shadowsocks:: { inbound:: datagram:: InboundShadowsocksDatagram , map_cipher} ,
9- utils:: { apply_tcp_options, new_udp_socket} ,
9+ utils:: {
10+ ToCanonical , apply_tcp_options, new_udp_socket,
11+ try_create_dualstack_tcplistener,
12+ } ,
1013 } ,
1114 session:: { Network , Session , SocksAddr , Type } ,
1215} ;
1316
1417use async_trait:: async_trait;
1518use shadowsocks:: { ProxySocket , context:: Context , net:: AcceptOpts , relay:: Address } ;
1619use std:: { net:: SocketAddr , sync:: Arc } ;
17- use tokio:: net:: TcpListener ;
1820use tracing:: { debug, warn} ;
1921
2022#[ derive( Clone ) ]
@@ -97,7 +99,7 @@ impl InboundHandlerTrait for ShadowsocksInbound {
9799 //
98100 // config.set_user_manager(user_manager);
99101
100- let listener = TcpListener :: bind ( self . addr ) . await ?;
102+ let listener = try_create_dualstack_tcplistener ( self . addr ) ?;
101103
102104 let ss_listener = shadowsocks:: relay:: tcprelay:: ProxyListener :: from_listener (
103105 context,
@@ -130,7 +132,7 @@ impl InboundHandlerTrait for ShadowsocksInbound {
130132 if !self . allow_lan
131133 && src_addr. ip ( ) != socket. get_ref ( ) . local_addr ( ) ?. ip ( )
132134 {
133- warn ! ( "Connection from {} is not allowed" , src_addr) ;
135+ warn ! ( "Connection from {} is not allowed" , src_addr. to_canonical ( ) ) ;
134136 continue ;
135137 }
136138
@@ -149,7 +151,7 @@ impl InboundHandlerTrait for ShadowsocksInbound {
149151 let sess = Session {
150152 network : Network :: Tcp ,
151153 typ : Type :: Shadowsocks ,
152- source : src_addr,
154+ source : src_addr. to_canonical ( ) ,
153155 so_mark : self . fw_mark ,
154156 destination : match target {
155157 Address :: SocketAddress ( addr) => SocksAddr :: Ip ( addr) ,
0 commit comments