Как libevent обнаруживает, что сокет закрыт

Если я добавлю событие для определенного сокета в цикл событий, например, сокет соединения TCP. тогда может случиться так, что сокет закрыт, тогда как будет действовать libevent? это может обнаружить это?

Спасибо!

1 ответ

РЕДАКТИРОВАТЬ: Я думаю, что я сначала неправильно понял ваш вопрос.

Если вы имеете в виду, что сокет закрыт от удаленного конца

Согласно документации вы можете использовать event_new() а также event_add() звонки, чтобы зарегистрировать интерес в сокете. Убедитесь, что вы указали EV_READ так как вас интересует, когда сокет закрыт.

Помните, что нет никакой разницы в готовности файлового дескриптора между данными, доступными для чтения, и закрытым сокетом. Обычно вы должны прочитать сокет, чтобы узнать, какое условие является истинным, но если вы не хотите читать сокет, вы можете найти здесь подсказку.

Если вы имеете в виду, что сокет локально закрыт (дескриптор файла был закрыт

Использование дескриптора файла после его закрытия никогда не определяется и всегда может привести к неопределенным результатам. Это не специфично для libevent. Прежде чем закрыть файловый дескриптор, вы должны убедиться, что никакой другой поток в вашей программе не использует его, и вы должны убедиться, что никакая другая часть вашей программы не будет пытаться использовать его в будущем. Это означает, что необходимо отменить регистрацию файлового дескриптора в libevent при его закрытии.

Другие вопросы по тегам