Я нашел этот сайт с точки зрения документации для libevent.На странице, посвященной событиям , есть хороший обзор того, что на самом деле означают различные флаги событий.По этой ссылке:
EV_READ : этот флаг указывает на событие, которое становится активным, когда предоставленный дескриптор файла готов к чтению.
EV_WRITE : Этот флаг указывает на событие, которое становится активным, когда предоставленный дескриптор файла готов к записи.
EV_SIGNAL : используется для обнаружения сигнала.
EV_PERSIST : указывает на то, что событие является постоянным.
EV_ET : Указывает, что событие должно инициироваться ребром, если базовый бэкэнд event_base поддерживает события, инициируемые ребром.Это влияет на семантику EV_READ и EV_WRITE.
Итак, чтобы ответить на ваш вопрос явно: EV_READ соответствует наличию данных, доступных для чтения из сокета или bufferevent, которые являются libeventсокетные эквиваленты, насколько я могу судить.EV_WRITE соответствует сокету / bufferevent, готовому к записи данных в него.Вы можете установить обратные вызовы чтения / записи, чтобы фактически выполнять чтение и запись данных с аргументом cb
равным
struct event *event_new(struct event_base *base, evutil_socket_t fd,
short what, event_callback_fn cb, void *arg);
Если вы выполняете IO сокетов с libevent, то выВозможно, вы захотите использовать буферные события - это то, что я использую в одном из моих проектов, snot_mon, , который вы можете проверить на github .