В следующем примере программы:Почему evhttp_request_get_connection() всегда возвращает NULL?
#include <event2/event.h>
#include <event2/http.h>
#include <assert.h>
void response_cb(struct evhttp_request* req, void *arg) {
assert(evhttp_request_get_response_code(req)<400);/* passes */
assert(evhttp_request_get_connection(req));/* FAILS ??? */
}
int main(int argc, char **argv) {
struct event_base* ev_base;
struct evhttp_connection *http_conn;
struct evhttp_request *req;
ev_base = event_base_new();
http_conn = evhttp_connection_base_new(ev_base, NULL, "google.com", 80);
req = evhttp_request_new(response_cb, NULL);
evhttp_make_request(http_conn, req, EVHTTP_REQ_GET, "/");
event_base_dispatch(ev_base);
return -1;
}
в response_cb первой утверждают, проходит, как и ожидалось, но секунд не удается т.е. evhttp_request_get_connection (REQ) возвращает значение NULL. Почему это?
Документация по требованиям evhttp_request_get_connection:
Возвращает объект соединения, связанного с запросом или NULL.
Но у меня все еще есть соединение. Я не распоряжаюсь им нигде.
Я делаю что-то неправильно или это ошибка или просто какая-то неясная особенность?
keep-alive, похоже, не имеет ничего общего с этой проблемой. Согласно http.c: evhttp_connection_done() req-> evcon = NULL задается для всех исходящих соединений не только для соединений, не поддерживающих связь. –
Ну, это был пример, а не полная проверка всех случаев, когда соединение может быть повторно использовано. Извините, если это так. –