libevent2 server http回调里面获取客户端端的ip, port, fd等待

写这个主要是防忘记,快速记忆起来!
libevent2 server http回调里面获取客户端端的ip, port, fd等等,在http_internal.h文件,struct evhttp_connection里面
, 可以直接保存http回调里面的struct evhttp *request, 只要在回调里面不调用 evhttp_send_reply() 客户端文件描述符是不会关闭的,http的回调结束后,并没有释放req。只有调用evhttp_send_reply时,会调用evhttp_send,进而调用evhttp_write_buffer。放入缓冲区。当从缓冲区发送数据后,会调用evhttp_send_done,进而调用evhttp_request_free,这个时候才释放

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在libevent中实现TCP/IP客户端回调函数,可以按照以下方式进行: ```c #include <event2/event.h> #include <event2/bufferevent.h> #include <event2/buffer.h> #include <event2/listener.h> #include <event2/util.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> #include <fcntl.h> #pragma comment(lib, "event.lib") #pragma comment(lib, "event_core.lib") #pragma comment(lib, "event_extra.lib") void read_cb(struct bufferevent* bev, void* ctx) { struct evbuffer* input = bufferevent_get_input(bev); char* line = evbuffer_readln(input, NULL, EVBUFFER_EOL_CRLF); if (line) { printf("recv: %s", line); bufferevent_write(bev, line, strlen(line)); bufferevent_write(bev, "\r\n", 2); free(line); } } void event_cb(struct bufferevent* bev, short events, void* ctx) { if (events & BEV_EVENT_EOF) { printf("Connection closed.\n"); } else if (events & BEV_EVENT_ERROR) { printf("Some other error.\n"); } bufferevent_free(bev); } int main(int argc, char** argv) { struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(8888); inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr); struct event_base* base = event_base_new(); struct bufferevent* bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE); bufferevent_setcb(bev, read_cb, NULL, event_cb, NULL); bufferevent_socket_connect(bev, (struct sockaddr*)&sin, sizeof(sin)); event_base_dispatch(base); return 0; } ``` 上述代码中,read_cb函数用于处理读取事件,当有数据可读时,先从输入缓冲区中读取一行数据,然后将该行数据发送回去,并释放内存空间。 event_cb函数则用于处理事件回调,当出现错误或连接断开时,会释放buffer_event对象。 在main函数中,通过创建bufferevent_socket_new对象并设置回调函数,然后使用bufferevent_socket_connect函数连接到服务器,最后通过event_base_dispatch函数进入事件循环。 注意:这里的回调函数只是示例,实际使用时需要根据具体需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值