diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-26 22:37:13 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-01-26 22:37:13 +0000 |
commit | 753e7b85bd612a06058a6802afaf717eafb1debc (patch) | |
tree | 086fff9efd8f05f98cd450af4bd59d626cec0df0 /libgo | |
parent | dcf25f597322d3ed96fe648e668a342db5015edd (diff) | |
download | gcc-753e7b85bd612a06058a6802afaf717eafb1debc.zip gcc-753e7b85bd612a06058a6802afaf717eafb1debc.tar.gz gcc-753e7b85bd612a06058a6802afaf717eafb1debc.tar.bz2 |
net: Check for EINTR.
From-SVN: r169309
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/go/net/fd.go | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/libgo/go/net/fd.go b/libgo/go/net/fd.go index 896178f..26d17d4 100644 --- a/libgo/go/net/fd.go +++ b/libgo/go/net/fd.go @@ -350,7 +350,7 @@ func (fd *netFD) Read(p []byte) (n int, err os.Error) { for { var errno int n, errno = syscall.Read(fd.sysfile.Fd(), p) - if errno == syscall.EAGAIN && fd.rdeadline >= 0 { + if (errno == syscall.EAGAIN || errno == syscall.EINTR) && fd.rdeadline >= 0 { pollserver.WaitRead(fd) continue } @@ -385,7 +385,7 @@ func (fd *netFD) ReadFrom(p []byte) (n int, sa syscall.Sockaddr, err os.Error) { for { var errno int n, sa, errno = syscall.Recvfrom(fd.sysfd, p, 0) - if errno == syscall.EAGAIN && fd.rdeadline >= 0 { + if (errno == syscall.EAGAIN || errno == syscall.EINTR) && fd.rdeadline >= 0 { pollserver.WaitRead(fd) continue } @@ -418,7 +418,7 @@ func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.S for { var errno int n, oobn, flags, sa, errno = syscall.Recvmsg(fd.sysfd, p, oob, 0) - if errno == syscall.EAGAIN && fd.rdeadline >= 0 { + if (errno == syscall.EAGAIN || errno == syscall.EINTR) && fd.rdeadline >= 0 { pollserver.WaitRead(fd) continue } @@ -464,7 +464,7 @@ func (fd *netFD) Write(p []byte) (n int, err os.Error) { if nn == len(p) { break } - if errno == syscall.EAGAIN && fd.wdeadline >= 0 { + if (errno == syscall.EAGAIN || errno == syscall.EINTR) && fd.wdeadline >= 0 { pollserver.WaitWrite(fd) continue } @@ -500,7 +500,7 @@ func (fd *netFD) WriteTo(p []byte, sa syscall.Sockaddr) (n int, err os.Error) { var oserr os.Error for { errno := syscall.Sendto(fd.sysfd, p, 0, sa) - if errno == syscall.EAGAIN && fd.wdeadline >= 0 { + if (errno == syscall.EAGAIN || errno == syscall.EINTR) && fd.wdeadline >= 0 { pollserver.WaitWrite(fd) continue } @@ -534,7 +534,7 @@ func (fd *netFD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oob for { var errno int errno = syscall.Sendmsg(fd.sysfd, p, oob, sa, 0) - if errno == syscall.EAGAIN && fd.wdeadline >= 0 { + if (errno == syscall.EAGAIN || errno == syscall.EINTR) && fd.wdeadline >= 0 { pollserver.WaitWrite(fd) continue } @@ -572,7 +572,7 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (nfd *netFD, err os. return nil, os.EINVAL } s, sa, e = syscall.Accept(fd.sysfd) - if e != syscall.EAGAIN { + if e != syscall.EAGAIN && e != syscall.EINTR { break } syscall.ForkLock.RUnlock() |