]> Cypherpunks repositories - gostls13.git/commitdiff
net: fix inconsistent error values on setters
authorMikio Hara <mikioh.mikioh@gmail.com>
Sun, 19 Apr 2015 10:01:49 +0000 (19:01 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Tue, 21 Apr 2015 04:05:59 +0000 (04:05 +0000)
This change fixes inconsistent error values on
Set{Deadline,ReadDeadline,WriteDeadline,ReadBuffer,WriteBuffer} for
Conn, Listener and PacketConn, and
Set{KeepAlive,KeepAlivePeriod,Linger,NoDelay} for TCPConn.

Updates #4856.

Change-Id: I34ca5e98f6de72863f85b2527478b20d8d5394dd
Reviewed-on: https://go-review.googlesource.com/9109
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/net/dial.go
src/net/net.go
src/net/tcpsock_plan9.go
src/net/tcpsock_posix.go
src/net/unixsock_plan9.go
src/net/unixsock_posix.go

index a204e5723b0946f05cc41708a8a13070ed53e4c6..feca759f827cac0971744fd3a31ff8cad778c75b 100644 (file)
@@ -180,8 +180,8 @@ func (d *Dialer) Dial(network, address string) (Conn, error) {
        c, err := dial(network, addrs.first(isIPv4), dialer, d.deadline())
        if d.KeepAlive > 0 && err == nil {
                if tc, ok := c.(*TCPConn); ok {
-                       tc.SetKeepAlive(true)
-                       tc.SetKeepAlivePeriod(d.KeepAlive)
+                       setKeepAlive(tc.fd, true)
+                       setKeepAlivePeriod(tc.fd, d.KeepAlive)
                        testHookSetKeepAlive()
                }
        }
index d1029832bf81004cf90701baa353a6670a0bb1a7..f38aed6919714efc05b9bb4075350fc0e1d20517 100644 (file)
@@ -192,7 +192,10 @@ func (c *conn) SetDeadline(t time.Time) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return c.fd.setDeadline(t)
+       if err := c.fd.setDeadline(t); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetReadDeadline implements the Conn SetReadDeadline method.
@@ -200,7 +203,10 @@ func (c *conn) SetReadDeadline(t time.Time) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return c.fd.setReadDeadline(t)
+       if err := c.fd.setReadDeadline(t); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetWriteDeadline implements the Conn SetWriteDeadline method.
@@ -208,7 +214,10 @@ func (c *conn) SetWriteDeadline(t time.Time) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return c.fd.setWriteDeadline(t)
+       if err := c.fd.setWriteDeadline(t); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetReadBuffer sets the size of the operating system's
@@ -217,7 +226,10 @@ func (c *conn) SetReadBuffer(bytes int) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return setReadBuffer(c.fd, bytes)
+       if err := setReadBuffer(c.fd, bytes); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetWriteBuffer sets the size of the operating system's
@@ -226,7 +238,10 @@ func (c *conn) SetWriteBuffer(bytes int) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return setWriteBuffer(c.fd, bytes)
+       if err := setWriteBuffer(c.fd, bytes); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // File sets the underlying os.File to blocking mode and returns a copy.
index deb2424c27ac4cf94dd58f12ab1c09a3fe51f268..a0b2630910548a1b3cacaacc96f8603392ec91a4 100644 (file)
@@ -69,7 +69,7 @@ func (c *TCPConn) CloseWrite() error {
 // some operating systems after sec seconds have elapsed any remaining
 // unsent data may be discarded.
 func (c *TCPConn) SetLinger(sec int) error {
-       return syscall.EPLAN9
+       return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: syscall.EPLAN9}
 }
 
 // SetKeepAlive sets whether the operating system should send
@@ -78,7 +78,10 @@ func (c *TCPConn) SetKeepAlive(keepalive bool) error {
        if !c.ok() {
                return syscall.EPLAN9
        }
-       return setKeepAlive(c.fd, keepalive)
+       if err := setKeepAlive(c.fd, keepalive); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetKeepAlivePeriod sets period between keep alives.
@@ -86,7 +89,10 @@ func (c *TCPConn) SetKeepAlivePeriod(d time.Duration) error {
        if !c.ok() {
                return syscall.EPLAN9
        }
-       return setKeepAlivePeriod(c.fd, d)
+       if err := setKeepAlivePeriod(c.fd, d); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetNoDelay controls whether the operating system should delay
@@ -94,7 +100,7 @@ func (c *TCPConn) SetKeepAlivePeriod(d time.Duration) error {
 // algorithm).  The default is true (no delay), meaning that data is
 // sent as soon as possible after a Write.
 func (c *TCPConn) SetNoDelay(noDelay bool) error {
-       return syscall.EPLAN9
+       return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: syscall.EPLAN9}
 }
 
 // DialTCP connects to the remote address raddr on the network net,
@@ -183,7 +189,10 @@ func (l *TCPListener) SetDeadline(t time.Time) error {
        if l == nil || l.fd == nil || l.fd.ctl == nil {
                return syscall.EINVAL
        }
-       return l.fd.setDeadline(t)
+       if err := l.fd.setDeadline(t); err != nil {
+               return &OpError{Op: "set", Net: l.fd.net, Addr: l.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // File returns a copy of the underlying os.File, set to blocking
index 78a3b8bf83a11707e19a0c401b43dbec1fb60b9f..62f9ee1c3fc99d48e2130e5b182a7981c47bdb1d 100644 (file)
@@ -53,7 +53,7 @@ type TCPConn struct {
 
 func newTCPConn(fd *netFD) *TCPConn {
        c := &TCPConn{conn{fd}}
-       c.SetNoDelay(true)
+       setNoDelay(c.fd, true)
        return c
 }
 
@@ -114,7 +114,10 @@ func (c *TCPConn) SetLinger(sec int) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return setLinger(c.fd, sec)
+       if err := setLinger(c.fd, sec); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetKeepAlive sets whether the operating system should send
@@ -123,7 +126,10 @@ func (c *TCPConn) SetKeepAlive(keepalive bool) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return setKeepAlive(c.fd, keepalive)
+       if err := setKeepAlive(c.fd, keepalive); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetKeepAlivePeriod sets period between keep alives.
@@ -131,7 +137,10 @@ func (c *TCPConn) SetKeepAlivePeriod(d time.Duration) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return setKeepAlivePeriod(c.fd, d)
+       if err := setKeepAlivePeriod(c.fd, d); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // SetNoDelay controls whether the operating system should delay
@@ -142,7 +151,10 @@ func (c *TCPConn) SetNoDelay(noDelay bool) error {
        if !c.ok() {
                return syscall.EINVAL
        }
-       return setNoDelay(c.fd, noDelay)
+       if err := setNoDelay(c.fd, noDelay); err != nil {
+               return &OpError{Op: "set", Net: c.fd.net, Addr: c.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // DialTCP connects to the remote address raddr on the network net,
@@ -280,7 +292,10 @@ func (l *TCPListener) SetDeadline(t time.Time) error {
        if l == nil || l.fd == nil {
                return syscall.EINVAL
        }
-       return l.fd.setDeadline(t)
+       if err := l.fd.setDeadline(t); err != nil {
+               return &OpError{Op: "set", Net: l.fd.net, Addr: l.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // File returns a copy of the underlying os.File, set to blocking
index 410933ddd1e7e0ffe4079eeec602dc63948ebedf..a2fb86278f55e9c4bac1d6c70ec3eb6a2ed6e000 100644 (file)
@@ -122,7 +122,7 @@ func (l *UnixListener) Addr() Addr { return nil }
 // SetDeadline sets the deadline associated with the listener.
 // A zero time value disables the deadline.
 func (l *UnixListener) SetDeadline(t time.Time) error {
-       return syscall.EPLAN9
+       return &OpError{Op: "set", Net: "<nil>", Addr: nil, Err: syscall.EPLAN9}
 }
 
 // File returns a copy of the underlying os.File, set to blocking
index 5cb2f436b618f2217dd2c233dfb8c987db6df43e..ed5ffd391fb33c295e4f2b8494cd5b395c36306a 100644 (file)
@@ -356,11 +356,14 @@ func (l *UnixListener) Addr() Addr { return l.fd.laddr }
 
 // SetDeadline sets the deadline associated with the listener.
 // A zero time value disables the deadline.
-func (l *UnixListener) SetDeadline(t time.Time) (err error) {
+func (l *UnixListener) SetDeadline(t time.Time) error {
        if l == nil || l.fd == nil {
                return syscall.EINVAL
        }
-       return l.fd.setDeadline(t)
+       if err := l.fd.setDeadline(t); err != nil {
+               return &OpError{Op: "set", Net: l.fd.net, Addr: l.fd.laddr, Err: err}
+       }
+       return nil
 }
 
 // File returns a copy of the underlying os.File, set to blocking