Skip to content

Commit b8260bb

Browse files
committed
feat(shadowsocks): dualstack listener
1 parent e237026 commit b8260bb

File tree

1 file changed

+7
-5
lines changed
  • clash-lib/src/proxy/shadowsocks/inbound

1 file changed

+7
-5
lines changed

clash-lib/src/proxy/shadowsocks/inbound/mod.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1417
use async_trait::async_trait;
1518
use shadowsocks::{ProxySocket, context::Context, net::AcceptOpts, relay::Address};
1619
use std::{net::SocketAddr, sync::Arc};
17-
use tokio::net::TcpListener;
1820
use 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

Comments
 (0)