Я использую этот маленький трюк, чтобы получить файловый дескриптор evhttp_connection, который находится рядом с указателем, который вы хотите. Это неприятный хак, но он проще и проще, чем перестраивать libevent. Он был протестирован под x86_64 и работает нормально.
static void
send_document_cb(struct evhttp_request *req, void *arg)
{
// ....
struct evhttp_connection *this_connection;
this_connection = evhttp_request_get_connection(req);
int *tricky;
tricky = (((int *)this_connection) + 4);
int fd = *tricky;
printf("fd: %i\n", fd);
// ....
}
Глядя на определение структуры (ниже), кажется, что требуемый буфер должен быть доступен с помощью (((void *) this_connection) + 8) или чего-то очень похожего.
struct evhttp_connection {
TAILQ_ENTRY(evhttp_connection) next;
evutil_socket_t fd;
struct bufferevent *bufev;
...
}