在Linux上读写串口

I use github.com/jacobsa/go-serial/serial package to work with serial port in my Go program.

Simplified example:

options := serial.OpenOptions{
        PortName: "/dev/ttyUSB0",
        BaudRate: 115200,
        DataBits: 8,
        StopBits: 1,
        MinimumReadSize = 0,
        InterCharacterTimeout = 100,
    }       


    port, _ := serial.Open(options)
    defer port.Close()

    res := make([]byte, 1024)
    var err error
    var i int = 0

    for i == 0 {
        i, err = port.Read(res)
        if err != nil && err != io.EOF {
            log.Printf("port.Read: %v", err)
            err = errors.New("I/O error")
        }

}
log.Println("Read bytes: ", i)

// do something else

When data is not ready, we have io.EOF error. But, when there is connection lost, there is also io.EOF errror! How could I distinguish waiting for new data and disconnection? If there is no data, FOR cycle need to be continue untill timeout is reached, but if connection is lost, I need to re-open port, because it's descriptor becames wrong. What is the good practice to handle these cases?