Последовательный порт ttyUSB0 читать блок при использовании libev

У меня есть последовательный порт ttyUSB0, и открыть его с помощью NONBLOCK.

fd = open(args_info.dev_arg, O_RDWR | O_NONBLOCK);

использование read немедленно вернется, все в порядке. Но когда использовать Либев

ev_io_init(&serial->recv_ctx->io, serial_recv_cb, fd, EV_READ);

serial_recv_cb будет блокировать до 100 байт. если длина данных меньше 100 байт, serial_recv_cb никогда не будет называться.

[root@jane client]# ./tcptrans --dev /dev/ttyUSB0 -d 7 --nic wlp2s0
serial.c +163 serial_recv_cb(): DEBUG: fd: 5, size: 100
serial.c +163 serial_recv_cb(): DEBUG: fd: 5, size: 100

Я думаю serial_recv_cb будет вызван немедленно. Почему либерав будет блокировать?

1 ответ

termios иметь VMIN а также VTIME.Мой VMIN установлен на 100, а VTIME равен 0., поэтому будет ждать до 100 байт.

Другие вопросы по тегам