blob: 1c5e0851ce1f2e2126a1b97d016fc897e5dacc5e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/*
Package rateio provides an io interfaces for rate-limiting.
This can be used to apply rate limiting to any type that implements an io-style interface.
For example, we can use it to restrict the reading rate of a net.Conn:
type limitedConn struct {
net.Conn
io.Reader // Our rate-limited io.Reader for net.Conn
}
func (r *limitedConn) Read(p []byte) (n int, err error) {
return r.Reader.Read(p)
}
// ReadLimitConn returns a net.Conn whose io.Reader interface is rate-limited by limiter.
func ReadLimitConn(conn net.Conn, limiter rateio.Limiter) net.Conn {
return &limitedConn{
Conn: conn,
Reader: rateio.NewReader(conn, limiter),
}
}
Then we can use ReadLimitConn to wrap our existing net.Conn and continue using
the wrapped version in its place.
*/
package rateio
|