package door import ( "log" "syscall" ) func Reader(handle int, readerChannel *chan byte) { // I don't need the select anymore. Let the read block. defer func() { if err := recover(); err != nil { log.Printf("Reader: %#v\n", err) } }() buffer := make([]byte, 1) for { read, err := syscall.Read(handle, buffer) if err != nil { log.Printf("Reader ERR: %#v\n", err) close(*readerChannel) break } if read == 1 { *readerChannel <- buffer[0] } else { log.Printf("READ FAILED %d\n", read) close(*readerChannel) break } } }