我会保持简短。如何以阻塞方式直接将等待在bufferevent
输出缓冲区中的数据直接清除到套接字。Libevent bufferevent socket flush
在进行异步写入(使用evbuffer_add
)后关闭我的套接字包装类后,libevent吐出epoll
错误,表示尝试写入无效的fd。我需要能够将flushvent数据刷新到套接字,有什么建议吗?
注意:具体的错误是Epoll MOD(4)在fd 9上失败。旧事件是6;读取更改为2(del);写更改为0(无):错误的文件描述符。
的问题是,libevent的实际上不写的所有数据到插座,数据留在libevents内部缓冲区中,并且截至目前,当数据仍在缓冲区中等待时关闭套接字。我想将libevent缓冲区刷入套接字然后关闭它。禁用套接字延迟不起作用。 – Dylan
我不认为'bufferevent_flush'还可以与网络套接字一起工作,但是你试过了吗? – 2013-08-18 12:16:19
如果'bufferevent_flush()'不起作用,那么我会在创建bufferevent时尝试设置'BEV_OPT_CLOSE_ON_FREE'标志。另外,bufferevents是内部引用计数的,所以如果bufferevent在释放时有待处理的延迟回调,那么在回调完成之前它不会被删除。 – 2013-08-18 12:22:40