У меня есть последовательный порт ttyUSB0, и я открываю его с помощью NONBLOCK.
fd = open(args_info.dev_arg, O_RDWR | O_NONBLOCK);
использование read
немедленно вернется, все в порядке. Но при использовании libev
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
будет называться немедленным. Почему libev будет блокировать?