()
| 375 | } |
| 376 | |
| 377 | func (fr *frameReader) readFrame() { |
| 378 | type result struct { |
| 379 | c byte |
| 380 | err error |
| 381 | } |
| 382 | done := make(chan result, 1) |
| 383 | |
| 384 | go func() { |
| 385 | c, err := fr.r.ReadByte() |
| 386 | done <- result{c, err} |
| 387 | }() |
| 388 | |
| 389 | select { |
| 390 | case res := <-done: |
| 391 | fr.frame, fr.err = res.c, res.err |
| 392 | case <-time.After(fr.timeout): |
| 393 | fr.err = ErrPollTimeout |
| 394 | } |
| 395 | } |