Fix UDP domain destination lost in outbound groups

This commit is contained in:
世界
2026-09-21 23:38:34 +08:00
parent 19f57607a9
commit ca7216a381
2 changed files with 8 additions and 21 deletions
+7 -20
View File
@@ -4,29 +4,16 @@ import (
"net"
"github.com/sagernet/sing/common/bufio"
N "github.com/sagernet/sing/common/network"
"github.com/sagernet/sing/common/x/list"
)
/*type GroupedConn interface {
MarkAsInternal()
}
func MarkAsInternal(conn any) {
if groupedConn, isGroupConn := common.Cast[GroupedConn](conn); isGroupConn {
groupedConn.MarkAsInternal()
}
}*/
type Conn struct {
net.Conn
group *Group
element *list.Element[*groupConnItem]
}
/*func (c *Conn) MarkAsInternal() {
c.element.Value.internal = true
}*/
func (c *Conn) Close() error {
c.group.access.Lock()
defer c.group.access.Unlock()
@@ -47,20 +34,20 @@ func (c *Conn) Upstream() any {
}
type PacketConn struct {
net.PacketConn
N.NetPacketConn
group *Group
element *list.Element[*groupConnItem]
}
/*func (c *PacketConn) MarkAsInternal() {
c.element.Value.internal = true
}*/
func newPacketConn(group *Group, conn net.PacketConn, element *list.Element[*groupConnItem]) *PacketConn {
return &PacketConn{NetPacketConn: bufio.NewPacketConn(conn), group: group, element: element}
}
func (c *PacketConn) Close() error {
c.group.access.Lock()
defer c.group.access.Unlock()
c.group.connections.Remove(c.element)
return c.PacketConn.Close()
return c.NetPacketConn.Close()
}
func (c *PacketConn) ReaderReplaceable() bool {
@@ -72,5 +59,5 @@ func (c *PacketConn) WriterReplaceable() bool {
}
func (c *PacketConn) Upstream() any {
return bufio.NewPacketConn(c.PacketConn)
return c.NetPacketConn
}
+1 -1
View File
@@ -33,7 +33,7 @@ func (g *Group) NewPacketConn(conn net.PacketConn, isExternal bool) net.PacketCo
g.access.Lock()
defer g.access.Unlock()
item := g.connections.PushBack(&groupConnItem{conn, isExternal})
return &PacketConn{PacketConn: conn, group: g, element: item}
return newPacketConn(g, conn, item)
}
func (g *Group) Interrupt(interruptExternalConnections bool) {