mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-10-20 08:14:24 +00:00
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package interrupt
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/sagernet/sing/common/bufio"
|
|
N "github.com/sagernet/sing/common/network"
|
|
"github.com/sagernet/sing/common/x/list"
|
|
)
|
|
|
|
type Conn struct {
|
|
net.Conn
|
|
group *Group
|
|
element *list.Element[*groupConnItem]
|
|
}
|
|
|
|
func (c *Conn) Close() error {
|
|
c.group.access.Lock()
|
|
c.group.connections.Remove(c.element)
|
|
c.group.access.Unlock()
|
|
return c.Conn.Close()
|
|
}
|
|
|
|
func (c *Conn) ReaderReplaceable() bool {
|
|
return true
|
|
}
|
|
|
|
func (c *Conn) WriterReplaceable() bool {
|
|
return true
|
|
}
|
|
|
|
func (c *Conn) Upstream() any {
|
|
return c.Conn
|
|
}
|
|
|
|
type PacketConn struct {
|
|
N.NetPacketConn
|
|
group *Group
|
|
element *list.Element[*groupConnItem]
|
|
}
|
|
|
|
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()
|
|
c.group.connections.Remove(c.element)
|
|
c.group.access.Unlock()
|
|
return c.NetPacketConn.Close()
|
|
}
|
|
|
|
func (c *PacketConn) ReaderReplaceable() bool {
|
|
return true
|
|
}
|
|
|
|
func (c *PacketConn) WriterReplaceable() bool {
|
|
return true
|
|
}
|
|
|
|
func (c *PacketConn) Upstream() any {
|
|
return c.NetPacketConn
|
|
}
|