Последовательный порт 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 байт.