]> Cypherpunks repositories - gostls13.git/commitdiff
net: Return error from CloseRead and CloseWrite.
authorAlbert Strasheim <fullung@gmail.com>
Wed, 12 Oct 2011 17:45:25 +0000 (13:45 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 12 Oct 2011 17:45:25 +0000 (13:45 -0400)
R=bradfitz, rsc, iant
CC=golang-dev
https://golang.org/cl/5167043

src/pkg/net/fd.go
src/pkg/net/fd_windows.go

index a0c56f78ee9b761c2e2ad2ac44bf8e5c0b5ccc23..e46e1203a5158ce49cf5369b19a1a294597e7dd9 100644 (file)
@@ -358,20 +358,23 @@ func (fd *netFD) Close() os.Error {
        return nil
 }
 
-func (fd *netFD) CloseRead() os.Error {
+func (fd *netFD) shutdown(how int) os.Error {
        if fd == nil || fd.sysfile == nil {
                return os.EINVAL
        }
-       syscall.Shutdown(fd.sysfd, syscall.SHUT_RD)
+       errno := syscall.Shutdown(fd.sysfd, how)
+       if errno != 0 {
+               return &OpError{"shutdown", fd.net, fd.laddr, os.Errno(errno)}
+       }
        return nil
 }
 
+func (fd *netFD) CloseRead() os.Error {
+       return fd.shutdown(syscall.SHUT_RD)
+}
+
 func (fd *netFD) CloseWrite() os.Error {
-       if fd == nil || fd.sysfile == nil {
-               return os.EINVAL
-       }
-       syscall.Shutdown(fd.sysfd, syscall.SHUT_WR)
-       return nil
+       return fd.shutdown(syscall.SHUT_WR)
 }
 
 func (fd *netFD) Read(p []byte) (n int, err os.Error) {
index 8155d04aae0d1337ed4f3f64908a994e1da3e5dd..8e8b3b746d4068f8231af28d2bfc9b446d577855 100644 (file)
@@ -312,20 +312,23 @@ func (fd *netFD) Close() os.Error {
        return nil
 }
 
-func (fd *netFD) CloseRead() os.Error {
+func (fd *netFD) shutdown(how int) os.Error {
        if fd == nil || fd.sysfd == syscall.InvalidHandle {
                return os.EINVAL
        }
-       syscall.Shutdown(fd.sysfd, syscall.SHUT_RD)
+       errno := syscall.Shutdown(fd.sysfd, how)
+       if errno != 0 {
+               return &OpError{"shutdown", fd.net, fd.laddr, os.Errno(errno)}
+       }
        return nil
 }
 
+func (fd *netFD) CloseRead() os.Error {
+       return fd.shutdown(syscall.SHUT_RD)
+}
+
 func (fd *netFD) CloseWrite() os.Error {
-       if fd == nil || fd.sysfd == syscall.InvalidHandle {
-               return os.EINVAL
-       }
-       syscall.Shutdown(fd.sysfd, syscall.SHUT_WR)
-       return nil
+       return fd.shutdown(syscall.SHUT_WR)
 }
 
 // Read from network.