我正在寻找基于 libev 编写一个套接字程序。我注意到https://github.com/coolaj86/libev-examples/blob/master/src/unix-echo-server.c中所述的几个示例使用基于 init 的回调。例如,
main() {
......
ev_io_init(&client.io, client_cb, client.fd, EV_READ|EV_WRITE);
ev_io_start(EV_A_ &server.io);
}
static void client_cb (EV_P_ ev_io *w, int revents)
{
if (revents & EV_READ)
{
....
} else if (revents & EV_WRITE) {
......
}
}
我的问题来自预期的行为,例如,我在 EV_READ 中读取的所有内容都存储在链接列表中。假设我不断获得免费的数据包流来读取,我有机会进入 EV_WRITE 吗?我必须将我通过读取接收到的所有内容发送到另一个套接字。那么它会是一次 EV_READ 和第二次 EV_WRITE 吗?换句话说,EV_WRITE 什么时候会被解除阻塞?或者我是否需要阻止 EV_READ 才能调用 EV_WRITE。有人可以帮我理解这一点吗?