123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package interrupt
- import (
- "net"
- "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()
- c.group.connections.Remove(c.element)
- 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 {
- net.PacketConn
- group *Group
- element *list.Element[*groupConnItem]
- }
- /*func (c *PacketConn) MarkAsInternal() {
- c.element.Value.internal = true
- }*/
- func (c *PacketConn) Close() error {
- c.group.access.Lock()
- defer c.group.access.Unlock()
- c.group.connections.Remove(c.element)
- return c.PacketConn.Close()
- }
- func (c *PacketConn) ReaderReplaceable() bool {
- return true
- }
- func (c *PacketConn) WriterReplaceable() bool {
- return true
- }
- func (c *PacketConn) Upstream() any {
- return c.PacketConn
- }
|