Как закрыть клиентское соединение средствами библиотеки libevent (на с++) после получения ответа от сервера, чтобы файловый дескриптор используемый соединением освободился?
Схема по которой происходит отправка запроса:
struct evhttp_connection *conn;
struct evhttp_request *req;
conn = evhttp_connection_new(addr, port);
evhttp_connection_set_timeout(conn, timeout);
evhttp_connection_set_retries(conn, count_of_retry_sending);
evhttp_connection_free_on_completion(conn);
evhttp_connection_set_closecb(conn, callback_close_connection, nullptr);
// привязка обработчика ответа к соединению
req = evhttp_request_new(response_handler, static_cast<void*>(context));
// заполнение выходного буфера данными
// ......
// отправка запроса
evhttp_make_request(conn, req, EVHTTP_REQ_POST, resource);
При просмотре под отладчиком захода в callback_close_connection обнаружил, что закрытие соединения происходит минут через 5 после ответа от сервера. Непонятно почему соединение не закрывается сразу после получения ответа.
Нашел решение. Убрал строчки:
evhttp_connection_free_on_completion(conn);
evhttp_connection_set_retries(conn, count_of_retry_sending);
Указатель на соединение передал в функцию обработчик ответа от сервера, где вызывал по окончании обработки evhttp_connection_free(conn);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости