net: Return error from CloseRead and CloseWrite.

R=bradfitz, rsc, iant
CC=golang-dev
https://golang.org/cl/5167043
diff --git a/src/pkg/net/fd.go b/src/pkg/net/fd.go
index a0c56f7..e46e120 100644
--- a/src/pkg/net/fd.go
+++ b/src/pkg/net/fd.go
@@ -358,20 +358,23 @@
 	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) {