我有一个串口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会阻塞?