Golang管道SetReadDeadline首次读取后失败

I'm attempting to read a named pipe on Linux using Go. Normally, the File.Read function blocks until there is data available on the pipe, but it's possible to use the relatively new File.SetReadDeadline function to set a "timeout" on the Read.

I've found, however, that this timeout only occurs on the first Read. If I run the following code, the message "Timed out, starting new read" only prints once, and the pipe.Read call blocks the next time through the loop. (It still works, if I send data to the pipe I get the "received" message.)

func Read(pipe *os.File) error {
  for {
    pipe.SetDeadline(time.Now().Add(5000 * time.Millisecond))
    buff := make([]byte, 1024*64)
    s, err := pipe.Read(buff)
    if err == nil {
      log.Printf("Received bytes of length  %d", s)
    } else if os.IsTimeout(err) {
      log.Println("Timed out, starting new read")
    } else {
      log.Printf("Pipe error %s", err)
      return err
    }
  }
}

In my research it looks like I may need to reset the underlying poll context (whatever that means.) Is there some way to make this work, or is it just a Go bug?