summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pkg/net/fd.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/pkg/net/fd.go b/src/pkg/net/fd.go
index 1fa537ccc..d7f2c9a5c 100644
--- a/src/pkg/net/fd.go
+++ b/src/pkg/net/fd.go
@@ -362,13 +362,16 @@ func (fd *netFD) Close() os.Error {
}
func (fd *netFD) Read(p []byte) (n int, err os.Error) {
- if fd == nil || fd.sysfile == nil {
+ if fd == nil {
return 0, os.EINVAL
}
fd.rio.Lock()
defer fd.rio.Unlock()
fd.incref()
defer fd.decref()
+ if fd.sysfile == nil {
+ return 0, os.EINVAL
+ }
if fd.rdeadline_delta > 0 {
fd.rdeadline = pollserver.Now() + fd.rdeadline_delta
} else {
@@ -430,13 +433,16 @@ func (fd *netFD) ReadFrom(p []byte) (n int, sa syscall.Sockaddr, err os.Error) {
}
func (fd *netFD) Write(p []byte) (n int, err os.Error) {
- if fd == nil || fd.sysfile == nil {
+ if fd == nil {
return 0, os.EINVAL
}
fd.wio.Lock()
defer fd.wio.Unlock()
fd.incref()
defer fd.decref()
+ if fd.sysfile == nil {
+ return 0, os.EINVAL
+ }
if fd.wdeadline_delta > 0 {
fd.wdeadline = pollserver.Now() + fd.wdeadline_delta
} else {
@@ -444,6 +450,7 @@ func (fd *netFD) Write(p []byte) (n int, err os.Error) {
}
nn := 0
var oserr os.Error
+
for {
n, errno := syscall.Write(fd.sysfile.Fd(), p[nn:])
if n > 0 {