Linux - porta serial read retornando EAGAIN

Estou com problemas para ler alguns dados de uma porta serial que abri da seguinte maneira. Eu usei essa instância de código muitas vezes e tudo funcionou bem, mas agora, por algum motivo que eu não consigo descobrir, eu sou completamente incapaz de ler qualquer coisa da porta serial.

Eu sou capaz de escrever e tudo é corretamente recebido no outro extremo, mas as respostas (que são enviadas corretamente) nunca são recebidas (Não, os cabos estão todos ok;))

O código que usei para abrir a porta serial é o seguinte:

fd = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK | O_NOCTTY);
if (fd == -1)
{
    Aviso("Unable to open port");
    return (fd);
}
else
{
    //Get the current options for the port...
    bzero(&options, sizeof(options)); /* clear struct for new port settings */
    tcgetattr(fd, &options);

    /*-- Set baud rate -------------------------------------------------------*/
    if (cfsetispeed(&options, SerialBaudInterp(BaudRate))==-1)
        perror("On cfsetispeed:");
    if (cfsetospeed(&options, SerialBaudInterp(BaudRate))==-1)
        perror("On cfsetospeed:");

    //Enable the receiver and set local mode...
    options.c_cflag |= (CLOCAL | CREAD);
    options.c_cflag &= ~PARENB; /* Parity disabled */
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;  /* Mask the character size bits */
    options.c_cflag |= SerialDataBitsInterp(8);           /* CS8 - Selects 8 data bits */
    options.c_cflag &= ~CRTSCTS;                            // disable hardware flow control
    options.c_iflag &= ~(IXON | IXOFF | IXANY);           // disable XON XOFF (for transmit and receive)
    options.c_cflag |= CRTSCTS;                         /* enable hardware flow control */

    options.c_cc[VMIN] = 0;     //min carachters to be read
    options.c_cc[VTIME] = 0;    //Time to wait for data (tenths of seconds)

    //Set the new options for the port...
    tcflush(fd, TCIFLUSH);
    if (tcsetattr(fd, TCSANOW, &options)==-1)
    {
        perror("On tcsetattr:");
    }

    PortOpen[ComPort] = fd;
}

return PortOpen[ComPort];

Depois que o port é initializeed eu escrevo algumas coisas para ele através do comando write simples ...

int nc = write(hCom, txchar, n);

onde hCom é o descritor de arquivo (e está tudo bem), e (como eu disse) isso funciona. Mas ... quando eu faço uma leitura depois, recebo um erro "Recurso temporariamente indisponível" do errno.

Eu testei selecionar para ver quando o descritor de arquivo tinha algo t ler ... mas sempre expira!

Eu leio dados como este:

ret = read(hCom, rxchar, n);

e eu sempre recebo um EAGAIN e não tenho ideia do porquê.

Atualizar:

O HW está funcionando bem! Eu posso ver que há dados de entrada na porta serial porque eu fiz um cabo de depuração para ler o que está acontecendo em outro terminal. Assim...

Eu sei o que o nonblocking deveria fazer. Minha pergunta é ... por que não há nada sendo lido? A mesma configuração funciona bem no windows, então todo o hardware está funcionando bem ...

Isso está me deixando louco! Tenho certeza que é algo simples como o inferno! Eu até tentei me livrar do O_NONBLOCK para ver quando eu receberia algo ... mas nada ...

questionAnswers(5)

yourAnswerToTheQuestion