Chris Lu
11 years ago
5 changed files with 103 additions and 33 deletions
-
65go/util/net_timeout.go
-
17go/weed/master.go
-
32go/weed/server.go
-
18go/weed/volume.go
-
4go/weed/weed_server/volume_server_handlers.go
@ -0,0 +1,65 @@ |
|||||
|
package util |
||||
|
|
||||
|
import ( |
||||
|
"net" |
||||
|
"time" |
||||
|
) |
||||
|
|
||||
|
// Listener wraps a net.Listener, and gives a place to store the timeout
|
||||
|
// parameters. On Accept, it will wrap the net.Conn with our own Conn for us.
|
||||
|
type Listener struct { |
||||
|
net.Listener |
||||
|
ReadTimeout time.Duration |
||||
|
WriteTimeout time.Duration |
||||
|
} |
||||
|
|
||||
|
func (l *Listener) Accept() (net.Conn, error) { |
||||
|
c, err := l.Listener.Accept() |
||||
|
if err != nil { |
||||
|
return nil, err |
||||
|
} |
||||
|
tc := &Conn{ |
||||
|
Conn: c, |
||||
|
ReadTimeout: l.ReadTimeout, |
||||
|
WriteTimeout: l.WriteTimeout, |
||||
|
} |
||||
|
return tc, nil |
||||
|
} |
||||
|
|
||||
|
// Conn wraps a net.Conn, and sets a deadline for every read
|
||||
|
// and write operation.
|
||||
|
type Conn struct { |
||||
|
net.Conn |
||||
|
ReadTimeout time.Duration |
||||
|
WriteTimeout time.Duration |
||||
|
} |
||||
|
|
||||
|
func (c *Conn) Read(b []byte) (int, error) { |
||||
|
err := c.Conn.SetReadDeadline(time.Now().Add(c.ReadTimeout)) |
||||
|
if err != nil { |
||||
|
return 0, err |
||||
|
} |
||||
|
return c.Conn.Read(b) |
||||
|
} |
||||
|
|
||||
|
func (c *Conn) Write(b []byte) (int, error) { |
||||
|
err := c.Conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout)) |
||||
|
if err != nil { |
||||
|
return 0, err |
||||
|
} |
||||
|
return c.Conn.Write(b) |
||||
|
} |
||||
|
|
||||
|
func NewListener(addr string, timeout time.Duration) (net.Listener, error) { |
||||
|
l, err := net.Listen("tcp", addr) |
||||
|
if err != nil { |
||||
|
return nil, err |
||||
|
} |
||||
|
|
||||
|
tl := &Listener{ |
||||
|
Listener: l, |
||||
|
ReadTimeout: timeout, |
||||
|
WriteTimeout: timeout, |
||||
|
} |
||||
|
return tl, nil |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue