|
@@ -94,14 +94,20 @@ func WaitForRead(dev Device) <-chan struct{} {
|
|
|
go func(fd uintptr) {
|
|
|
defer close(sigChan)
|
|
|
var fdsRead sys.FdSet
|
|
|
- fdsRead.Set(int(fd))
|
|
|
- tv := sys.Timeval{Sec: 2, Usec: 0}
|
|
|
for {
|
|
|
- _, errno := sys.Select(int(fd+1), &fdsRead, nil, nil, &tv)
|
|
|
+ fdsRead.Zero()
|
|
|
+ fdsRead.Set(int(fd))
|
|
|
+ tv := sys.Timeval{Sec: 2, Usec: 0}
|
|
|
+ n, errno := sys.Select(int(fd+1), &fdsRead, nil, nil, &tv)
|
|
|
if errno == sys.EINTR {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
+ if n == 0 {
|
|
|
+ // timeout, no data available
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
sigChan <- struct{}{}
|
|
|
}
|
|
|
}(dev.Fd())
|