0

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

4

1 回答 1

0

termiosVMINVTIME。我的 VMIN 设置为 100,VTIME 为 0。所以会等到 100 字节。

于 2018-04-17T00:51:13.500 回答