mirror of
https://github.com/golang/go
synced 2024-11-24 21:10:04 -07:00
net: Added function SetTimeout() to interface Listener.
Fixes #2148. R=golang-dev, bradfitz, rsc CC=golang-dev https://golang.org/cl/4905042
This commit is contained in:
parent
182cf988e9
commit
d72c96df2a
@ -585,6 +585,11 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (nfd *netFD, err os.
|
||||
|
||||
fd.incref()
|
||||
defer fd.decref()
|
||||
if fd.rdeadline_delta > 0 {
|
||||
fd.rdeadline = pollserver.Now() + fd.rdeadline_delta
|
||||
} else {
|
||||
fd.rdeadline = 0
|
||||
}
|
||||
|
||||
// See ../syscall/exec.go for description of ForkLock.
|
||||
// It is okay to hold the lock across syscall.Accept
|
||||
@ -598,7 +603,7 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (nfd *netFD, err os.
|
||||
return nil, os.EINVAL
|
||||
}
|
||||
s, rsa, e = syscall.Accept(fd.sysfd)
|
||||
if e != syscall.EAGAIN {
|
||||
if e != syscall.EAGAIN || fd.rdeadline < 0 {
|
||||
break
|
||||
}
|
||||
syscall.ForkLock.RUnlock()
|
||||
|
@ -298,6 +298,14 @@ func (l *TCPListener) Close() os.Error {
|
||||
// Addr returns the listener's network address, a *TCPAddr.
|
||||
func (l *TCPListener) Addr() Addr { return l.fd.laddr }
|
||||
|
||||
// SetTimeout sets the deadline associated with the listener
|
||||
func (l *TCPListener) SetTimeout(nsec int64) os.Error {
|
||||
if l == nil || l.fd == nil {
|
||||
return os.EINVAL
|
||||
}
|
||||
return setTimeout(l.fd, nsec)
|
||||
}
|
||||
|
||||
// File returns a copy of the underlying os.File, set to blocking mode.
|
||||
// It is the caller's responsibility to close f when finished.
|
||||
// Closing c does not affect f, and closing f does not affect c.
|
||||
|
@ -423,6 +423,14 @@ func (l *UnixListener) Close() os.Error {
|
||||
// Addr returns the listener's network address.
|
||||
func (l *UnixListener) Addr() Addr { return l.fd.laddr }
|
||||
|
||||
// SetTimeout sets the deadline associated wuth the listener
|
||||
func (l *UnixListener) SetTimeout(nsec int64) (err os.Error) {
|
||||
if l == nil || l.fd == nil {
|
||||
return os.EINVAL
|
||||
}
|
||||
return setTimeout(l.fd, nsec)
|
||||
}
|
||||
|
||||
// File returns a copy of the underlying os.File, set to blocking mode.
|
||||
// It is the caller's responsibility to close f when finished.
|
||||
// Closing c does not affect f, and closing f does not affect c.
|
||||
|
Loading…
Reference in New Issue
Block a user