Files
V2bX/common/rate/conn.go

36 lines
509 B
Go

package rate
import (
"net"
"github.com/juju/ratelimit"
)
func NewConnRateLimiter(c net.Conn, l *ratelimit.Bucket) *Conn {
return &Conn{
Conn: c,
limiter: l,
}
}
type Conn struct {
net.Conn
limiter *ratelimit.Bucket
}
func (c *Conn) Read(b []byte) (n int, err error) {
n, err = c.Conn.Read(b)
if n > 0 {
c.limiter.Wait(int64(n))
}
return n, err
}
func (c *Conn) Write(b []byte) (n int, err error) {
n, err = c.Conn.Write(b)
if n > 0 {
c.limiter.Wait(int64(n))
}
return n, err
}