我有一个串口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会阻止?
答案 0 :(得分:0)
termios
有VMIN
和VTIME
。我的VMIN设置为100,VTIME为0.因此将等到100字节。