我使用这个小技巧来获取 evhttp_connection 的文件描述符,它就在您想要的指针旁边。这是一个讨厌的 hack,但它很简单,也更容易重建 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);
// ....
}
查看结构定义(下方),您想要的 bufev 似乎应该可以使用 (((void *)this_connection) + 8) 或非常类似的东西访问。
struct evhttp_connection {
TAILQ_ENTRY(evhttp_connection) next;
evutil_socket_t fd;
struct bufferevent *bufev;
...
}