use new buffer pool
This commit is contained in:
parent
7c16e3e519
commit
97ff9b846b
@ -1,6 +1,6 @@
|
|||||||
FROM golang:1-alpine as builder
|
FROM golang:1-alpine as builder
|
||||||
|
|
||||||
RUN apk add --no-cache musl-dev git gcc
|
RUN apk add --no-cache musl-dev gcc
|
||||||
|
|
||||||
ADD . /src
|
ADD . /src
|
||||||
|
|
||||||
|
5
dns.go
5
dns.go
@ -14,6 +14,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-gost/bpool"
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
@ -59,8 +60,8 @@ func (h *dnsHandler) Init(opts ...HandlerOption) {
|
|||||||
func (h *dnsHandler) Handle(conn net.Conn) {
|
func (h *dnsHandler) Handle(conn net.Conn) {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, err := conn.Read(b)
|
n, err := conn.Read(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
1
go.mod
1
go.mod
@ -15,6 +15,7 @@ require (
|
|||||||
github.com/ginuerzh/gosocks4 v0.0.1
|
github.com/ginuerzh/gosocks4 v0.0.1
|
||||||
github.com/ginuerzh/gosocks5 v0.2.0
|
github.com/ginuerzh/gosocks5 v0.2.0
|
||||||
github.com/ginuerzh/tls-dissector v0.0.2-0.20200224064855-24ab2b3a3796
|
github.com/ginuerzh/tls-dissector v0.0.2-0.20200224064855-24ab2b3a3796
|
||||||
|
github.com/go-gost/bpool v1.0.0
|
||||||
github.com/go-gost/relay v0.1.0
|
github.com/go-gost/relay v0.1.0
|
||||||
github.com/go-log/log v0.1.0
|
github.com/go-log/log v0.1.0
|
||||||
github.com/gobwas/glob v0.2.3
|
github.com/gobwas/glob v0.2.3
|
||||||
|
4
go.sum
4
go.sum
@ -28,6 +28,8 @@ github.com/ginuerzh/gosocks5 v0.2.0 h1:K0Ua23U9LU3BZrf3XpGDcs0mP8DiEpa6PJE4TA/MU
|
|||||||
github.com/ginuerzh/gosocks5 v0.2.0/go.mod h1:qp22mr6tH/prEoaN0pFukq76LlScIE+F2rP2ZP5ZHno=
|
github.com/ginuerzh/gosocks5 v0.2.0/go.mod h1:qp22mr6tH/prEoaN0pFukq76LlScIE+F2rP2ZP5ZHno=
|
||||||
github.com/ginuerzh/tls-dissector v0.0.2-0.20200224064855-24ab2b3a3796 h1:VPXbYRvZUzTemsI7u0FzOnEuHeHwQuMTPXApAu8aeX4=
|
github.com/ginuerzh/tls-dissector v0.0.2-0.20200224064855-24ab2b3a3796 h1:VPXbYRvZUzTemsI7u0FzOnEuHeHwQuMTPXApAu8aeX4=
|
||||||
github.com/ginuerzh/tls-dissector v0.0.2-0.20200224064855-24ab2b3a3796/go.mod h1:YyzP8PQrGwDH/XsfHJXwqdHLwWvBYxu77YVKm0+68f0=
|
github.com/ginuerzh/tls-dissector v0.0.2-0.20200224064855-24ab2b3a3796/go.mod h1:YyzP8PQrGwDH/XsfHJXwqdHLwWvBYxu77YVKm0+68f0=
|
||||||
|
github.com/go-gost/bpool v1.0.0 h1:Og+6SH6SooHqf8CIwuxcPRHq8k0Si4YEfO2mBEi3/Uk=
|
||||||
|
github.com/go-gost/bpool v1.0.0/go.mod h1:y/Pywm22A4OrJqNF/mL4nW7yb9fCdhlO8cxjyparkFI=
|
||||||
github.com/go-gost/relay v0.1.0 h1:UOf2YwAzzaUjY5mdpMuLfSw0vz62iIFYk7oJQkuhlGw=
|
github.com/go-gost/relay v0.1.0 h1:UOf2YwAzzaUjY5mdpMuLfSw0vz62iIFYk7oJQkuhlGw=
|
||||||
github.com/go-gost/relay v0.1.0/go.mod h1:YFCpddLOFE3NlIkeDWRdEs8gL/GFsqXdtaf8SV5v4YQ=
|
github.com/go-gost/relay v0.1.0/go.mod h1:YFCpddLOFE3NlIkeDWRdEs8gL/GFsqXdtaf8SV5v4YQ=
|
||||||
github.com/go-log/log v0.1.0 h1:wudGTNsiGzrD5ZjgIkVZ517ugi2XRe9Q/xRCzwEO4/U=
|
github.com/go-log/log v0.1.0 h1:wudGTNsiGzrD5ZjgIkVZ517ugi2XRe9Q/xRCzwEO4/U=
|
||||||
@ -48,6 +50,8 @@ github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE
|
|||||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
github.com/klauspost/reedsolomon v1.7.0 h1:pLFmRKGko2ZieiTGyo9DahLCIuljyxm+Zzhz/fYEonE=
|
github.com/klauspost/reedsolomon v1.7.0 h1:pLFmRKGko2ZieiTGyo9DahLCIuljyxm+Zzhz/fYEonE=
|
||||||
github.com/klauspost/reedsolomon v1.7.0/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4=
|
github.com/klauspost/reedsolomon v1.7.0/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4=
|
||||||
|
github.com/libp2p/go-buffer-pool v0.0.3-0.20191206215133-4016316b51a2 h1:pSnSOZz0cmK3c6944tZdBq7Je9Qf28w80n+PCaq+2Qk=
|
||||||
|
github.com/libp2p/go-buffer-pool v0.0.3-0.20191206215133-4016316b51a2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM=
|
||||||
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f h1:sSeNEkJrs+0F9TUau0CgWTTNEwF23HST3Eq0A+QIx+A=
|
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f h1:sSeNEkJrs+0F9TUau0CgWTTNEwF23HST3Eq0A+QIx+A=
|
||||||
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04=
|
github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04=
|
||||||
github.com/lucas-clemente/quic-go v0.10.0 h1:xEF+pSHYAOcu+U10Meunf+DTtc8vhQDRqlA0BJ6hufc=
|
github.com/lucas-clemente/quic-go v0.10.0 h1:xEF+pSHYAOcu+U10Meunf+DTtc8vhQDRqlA0BJ6hufc=
|
||||||
|
19
gost.go
19
gost.go
@ -13,7 +13,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
@ -32,24 +31,6 @@ var (
|
|||||||
largeBufferSize = 32 * 1024 // 32KB large buffer
|
largeBufferSize = 32 * 1024 // 32KB large buffer
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
sPool = sync.Pool{
|
|
||||||
New: func() interface{} {
|
|
||||||
return make([]byte, smallBufferSize)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
mPool = sync.Pool{
|
|
||||||
New: func() interface{} {
|
|
||||||
return make([]byte, mediumBufferSize)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
lPool = sync.Pool{
|
|
||||||
New: func() interface{} {
|
|
||||||
return make([]byte, largeBufferSize)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// KeepAliveTime is the keep alive time period for TCP connection.
|
// KeepAliveTime is the keep alive time period for TCP connection.
|
||||||
KeepAliveTime = 180 * time.Second
|
KeepAliveTime = 180 * time.Second
|
||||||
|
5
relay.go
5
relay.go
@ -13,6 +13,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-gost/bpool"
|
||||||
"github.com/go-gost/relay"
|
"github.com/go-gost/relay"
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
)
|
)
|
||||||
@ -338,8 +339,8 @@ func (c *relayConn) Write(b []byte) (n int, err error) {
|
|||||||
nsize := 2 + len(b)
|
nsize := 2 + len(b)
|
||||||
var buf []byte
|
var buf []byte
|
||||||
if nsize <= mediumBufferSize {
|
if nsize <= mediumBufferSize {
|
||||||
buf = mPool.Get().([]byte)
|
buf = bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(buf)
|
defer bpool.Put(buf)
|
||||||
} else {
|
} else {
|
||||||
buf = make([]byte, nsize)
|
buf = make([]byte, nsize)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-gost/bpool"
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -120,8 +121,8 @@ func transport(rw1, rw2 io.ReadWriter) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func copyBuffer(dst io.Writer, src io.Reader) error {
|
func copyBuffer(dst io.Writer, src io.Reader) error {
|
||||||
buf := lPool.Get().([]byte)
|
buf := bpool.Get(largeBufferSize)
|
||||||
defer lPool.Put(buf)
|
defer bpool.Put(buf)
|
||||||
|
|
||||||
_, err := io.CopyBuffer(dst, src, buf)
|
_, err := io.CopyBuffer(dst, src, buf)
|
||||||
return err
|
return err
|
||||||
|
21
socks.go
21
socks.go
@ -15,6 +15,7 @@ import (
|
|||||||
|
|
||||||
"github.com/ginuerzh/gosocks4"
|
"github.com/ginuerzh/gosocks4"
|
||||||
"github.com/ginuerzh/gosocks5"
|
"github.com/ginuerzh/gosocks5"
|
||||||
|
"github.com/go-gost/bpool"
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
smux "gopkg.in/xtaci/smux.v1"
|
smux "gopkg.in/xtaci/smux.v1"
|
||||||
)
|
)
|
||||||
@ -1238,8 +1239,8 @@ func (h *socks5Handler) transportUDP(relay, peer net.PacketConn) (err error) {
|
|||||||
var clientAddr net.Addr
|
var clientAddr net.Addr
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
n, laddr, err := relay.ReadFrom(b)
|
n, laddr, err := relay.ReadFrom(b)
|
||||||
@ -1275,8 +1276,8 @@ func (h *socks5Handler) transportUDP(relay, peer net.PacketConn) (err error) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
n, raddr, err := peer.ReadFrom(b)
|
n, raddr, err := peer.ReadFrom(b)
|
||||||
@ -1318,8 +1319,8 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error
|
|||||||
var clientAddr *net.UDPAddr
|
var clientAddr *net.UDPAddr
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
n, addr, err := uc.ReadFromUDP(b)
|
n, addr, err := uc.ReadFromUDP(b)
|
||||||
@ -1458,8 +1459,8 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err
|
|||||||
errc := make(chan error, 2)
|
errc := make(chan error, 2)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
n, addr, err := pc.ReadFrom(b)
|
n, addr, err := pc.ReadFrom(b)
|
||||||
@ -2033,8 +2034,8 @@ func (c *socks5UDPConn) Read(b []byte) (n int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *socks5UDPConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
func (c *socks5UDPConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
||||||
data := mPool.Get().([]byte)
|
data := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(data)
|
defer bpool.Put(data)
|
||||||
|
|
||||||
n, err = c.UDPConn.Read(data)
|
n, err = c.UDPConn.Read(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
29
ss.go
29
ss.go
@ -11,6 +11,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ginuerzh/gosocks5"
|
"github.com/ginuerzh/gosocks5"
|
||||||
|
"github.com/go-gost/bpool"
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
"github.com/shadowsocks/go-shadowsocks2/core"
|
"github.com/shadowsocks/go-shadowsocks2/core"
|
||||||
ss "github.com/shadowsocks/shadowsocks-go/shadowsocks"
|
ss "github.com/shadowsocks/shadowsocks-go/shadowsocks"
|
||||||
@ -61,8 +62,8 @@ func (c *shadowConnector) ConnectContext(ctx context.Context, conn net.Conn, net
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
rawaddr := sPool.Get().([]byte)
|
rawaddr := bpool.Get(smallBufferSize)
|
||||||
defer sPool.Put(rawaddr)
|
defer bpool.Put(rawaddr)
|
||||||
|
|
||||||
n, err := socksAddr.Encode(rawaddr)
|
n, err := socksAddr.Encode(rawaddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -340,8 +341,8 @@ func (h *shadowUDPHandler) transportPacket(conn, cc net.PacketConn) (err error)
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, addr, err := conn.ReadFrom(b)
|
n, addr, err := conn.ReadFrom(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -377,8 +378,8 @@ func (h *shadowUDPHandler) transportPacket(conn, cc net.PacketConn) (err error)
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, addr, err := cc.ReadFrom(b)
|
n, addr, err := cc.ReadFrom(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -452,8 +453,8 @@ func (h *shadowUDPHandler) transportUDP(conn net.Conn, cc net.PacketConn) error
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
er := func() (err error) {
|
er := func() (err error) {
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, addr, err := cc.ReadFrom(b)
|
n, addr, err := cc.ReadFrom(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -514,8 +515,8 @@ type shadowUDPPacketConn struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *shadowUDPPacketConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
func (c *shadowUDPPacketConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
||||||
buf := mPool.Get().([]byte)
|
buf := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(buf)
|
defer bpool.Put(buf)
|
||||||
|
|
||||||
buf[0] = 0
|
buf[0] = 0
|
||||||
buf[1] = 0
|
buf[1] = 0
|
||||||
@ -553,8 +554,8 @@ func (c *shadowUDPPacketConn) WriteTo(b []byte, addr net.Addr) (n int, err error
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := mPool.Get().([]byte)
|
buf := bpool.Get(mediumBufferSize)
|
||||||
defer mPool.Put(buf)
|
defer bpool.Put(buf)
|
||||||
|
|
||||||
copy(buf, rawaddr[:nn])
|
copy(buf, rawaddr[:nn])
|
||||||
n = copy(buf[nn:], b)
|
n = copy(buf[nn:], b)
|
||||||
@ -611,8 +612,8 @@ func initShadowCipher(info *url.Userinfo) (cipher core.Cipher) {
|
|||||||
|
|
||||||
func readSocksAddr(r io.Reader) (*gosocks5.Addr, error) {
|
func readSocksAddr(r io.Reader) (*gosocks5.Addr, error) {
|
||||||
addr := &gosocks5.Addr{}
|
addr := &gosocks5.Addr{}
|
||||||
b := sPool.Get().([]byte)
|
b := bpool.Get(smallBufferSize)
|
||||||
defer sPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
_, err := io.ReadFull(r, b[:1])
|
_, err := io.ReadFull(r, b[:1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
17
tuntap.go
17
tuntap.go
@ -10,6 +10,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-gost/bpool"
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
"github.com/shadowsocks/go-shadowsocks2/core"
|
"github.com/shadowsocks/go-shadowsocks2/core"
|
||||||
"github.com/shadowsocks/go-shadowsocks2/shadowaead"
|
"github.com/shadowsocks/go-shadowsocks2/shadowaead"
|
||||||
@ -260,8 +261,8 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
b := sPool.Get().([]byte)
|
b := bpool.Get(smallBufferSize)
|
||||||
defer sPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, err := tun.Read(b)
|
n, err := tun.Read(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -334,8 +335,8 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
b := sPool.Get().([]byte)
|
b := bpool.Get(smallBufferSize)
|
||||||
defer sPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, addr, err := conn.ReadFrom(b)
|
n, addr, err := conn.ReadFrom(b)
|
||||||
if err != nil &&
|
if err != nil &&
|
||||||
@ -636,8 +637,8 @@ func (h *tapHandler) transportTap(tap net.Conn, conn net.PacketConn, raddr net.A
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
b := sPool.Get().([]byte)
|
b := bpool.Get(smallBufferSize)
|
||||||
defer sPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, err := tap.Read(b)
|
n, err := tap.Read(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -696,8 +697,8 @@ func (h *tapHandler) transportTap(tap net.Conn, conn net.PacketConn, raddr net.A
|
|||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
err := func() error {
|
err := func() error {
|
||||||
b := sPool.Get().([]byte)
|
b := bpool.Get(smallBufferSize)
|
||||||
defer sPool.Put(b)
|
defer bpool.Put(b)
|
||||||
|
|
||||||
n, addr, err := conn.ReadFrom(b)
|
n, addr, err := conn.ReadFrom(b)
|
||||||
if err != nil &&
|
if err != nil &&
|
||||||
|
5
udp.go
5
udp.go
@ -7,6 +7,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-gost/bpool"
|
||||||
"github.com/go-log/log"
|
"github.com/go-log/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -90,7 +91,7 @@ func UDPListener(addr string, cfg *UDPListenConfig) (Listener, error) {
|
|||||||
func (l *udpListener) listenLoop() {
|
func (l *udpListener) listenLoop() {
|
||||||
for {
|
for {
|
||||||
// NOTE: this buffer will be released in the udpServerConn after read.
|
// NOTE: this buffer will be released in the udpServerConn after read.
|
||||||
b := mPool.Get().([]byte)
|
b := bpool.Get(mediumBufferSize)
|
||||||
|
|
||||||
n, raddr, err := l.ln.ReadFrom(b)
|
n, raddr, err := l.ln.ReadFrom(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -243,7 +244,7 @@ func (c *udpServerConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
|
|||||||
case bb := <-c.rChan:
|
case bb := <-c.rChan:
|
||||||
n = copy(b, bb)
|
n = copy(b, bb)
|
||||||
if cap(bb) == mediumBufferSize {
|
if cap(bb) == mediumBufferSize {
|
||||||
mPool.Put(bb[:cap(bb)])
|
bpool.Put(bb[:cap(bb)])
|
||||||
}
|
}
|
||||||
case <-c.closed:
|
case <-c.closed:
|
||||||
err = errors.New("read from closed connection")
|
err = errors.New("read from closed connection")
|
||||||
|
Loading…
Reference in New Issue
Block a user