|
@@ -10,6 +10,7 @@ import (
|
|
"github.com/sagernet/sing-dns"
|
|
"github.com/sagernet/sing-dns"
|
|
"github.com/sagernet/sing/common"
|
|
"github.com/sagernet/sing/common"
|
|
"github.com/sagernet/sing/common/buf"
|
|
"github.com/sagernet/sing/common/buf"
|
|
|
|
+ "github.com/sagernet/sing/common/control"
|
|
E "github.com/sagernet/sing/common/exceptions"
|
|
E "github.com/sagernet/sing/common/exceptions"
|
|
M "github.com/sagernet/sing/common/metadata"
|
|
M "github.com/sagernet/sing/common/metadata"
|
|
N "github.com/sagernet/sing/common/network"
|
|
N "github.com/sagernet/sing/common/network"
|
|
@@ -17,11 +18,15 @@ import (
|
|
|
|
|
|
func (a *myInboundAdapter) ListenUDP() (net.PacketConn, error) {
|
|
func (a *myInboundAdapter) ListenUDP() (net.PacketConn, error) {
|
|
bindAddr := M.SocksaddrFrom(netip.Addr(a.listenOptions.Listen), a.listenOptions.ListenPort)
|
|
bindAddr := M.SocksaddrFrom(netip.Addr(a.listenOptions.Listen), a.listenOptions.ListenPort)
|
|
- udpConn, err := net.ListenUDP(M.NetworkFromNetAddr(N.NetworkUDP, bindAddr.Addr), bindAddr.UDPAddr())
|
|
|
|
|
|
+ var lc net.ListenConfig
|
|
|
|
+ if !a.listenOptions.UDPFragment {
|
|
|
|
+ lc.Control = control.Append(lc.Control, control.DisableUDPFragment())
|
|
|
|
+ }
|
|
|
|
+ udpConn, err := lc.ListenPacket(a.ctx, M.NetworkFromNetAddr(N.NetworkUDP, bindAddr.Addr), bindAddr.String())
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
- a.udpConn = udpConn
|
|
|
|
|
|
+ a.udpConn = udpConn.(*net.UDPConn)
|
|
a.udpAddr = bindAddr
|
|
a.udpAddr = bindAddr
|
|
a.logger.Info("udp server started at ", udpConn.LocalAddr())
|
|
a.logger.Info("udp server started at ", udpConn.LocalAddr())
|
|
return udpConn, err
|
|
return udpConn, err
|