Add direct io option for clash api

This commit is contained in:
世界
2022-09-26 15:31:02 +08:00
parent b5564ef3d3
commit 7f9c870bba
5 changed files with 157 additions and 51 deletions

View File

@@ -0,0 +1,37 @@
package trackerconn
import (
"github.com/sagernet/sing/common/buf"
M "github.com/sagernet/sing/common/metadata"
N "github.com/sagernet/sing/common/network"
"go.uber.org/atomic"
)
type PacketConn struct {
N.PacketConn
readCounter *atomic.Int64
writeCounter *atomic.Int64
}
func NewPacket(conn N.PacketConn, readCounter *atomic.Int64, writeCounter *atomic.Int64) *PacketConn {
return &PacketConn{conn, readCounter, writeCounter}
}
func (c *PacketConn) ReadPacket(buffer *buf.Buffer) (destination M.Socksaddr, err error) {
destination, err = c.PacketConn.ReadPacket(buffer)
if err == nil {
c.readCounter.Add(int64(buffer.Len()))
}
return
}
func (c *PacketConn) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error {
dataLen := int64(buffer.Len())
err := c.PacketConn.WritePacket(buffer, destination)
if err != nil {
return err
}
c.writeCounter.Add(dataLen)
return nil
}