我在使用TCP套接字的C/Linux中有一个聊天服务器。使用libev时,我可以为一次套接字的读取事件创建一个ev_io监视程序。就像是:

ev_io* new_watcher = (ev_io*)malloc(sizeof(ev_io));

//initialize the watcher
ev_init(new_watcher, read_cb);

//set the fd and event to fire on write
ev_io_set(new_watcher, watcher->fd, EV_READ);

//start watching
ev_io_start(loop, new_watcher);

这样做很好,因为只有在有要读取的数据时才会触发read事件。但是,我必须以不同的方式对待写事件,因为即使我没有要写的数据,它们也会不断触发。为了解决此问题,我让read_callback仅在准备好要写入的数据时为写入数据创建一个ev_io监视程序,然后write_callback在发送其消息后将其删除。

这意味着每次需要处理消息时,我都会分配,初始化,设置,监视,取消监视和取消分配写入监视程序。我担心我可能会处理错误和效率低下的问题。

在libev中处理write_callback事件的最佳方法是什么?

提前致谢。

最佳答案

分配可能会增加一些开销,您可以使用静态变量代替malloc,也可以使用一次malloc,并且只有在事件循环完成后才释放。
您只需要在写之前设置,然后在成功后取消设置。但是,是的,这就是需要做的事情。

关于c - Libev-I/O回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9451884/

10-10 10:00