windows下libevent VS2012编译
来源:互联网 发布:fifa online mac 编辑:程序博客网 时间:2024/05/20 14:20
首先在http://libevent.org/上下载最先的libevent压缩包。
源文件有个问题,evutil.c源码修改这部分
不然使用会失败;
打开VS2012开发工具命令行,cd 到libevent目录;
键入
完成编译,生成libevent_core.lib libevent_extras.lib libevent.lib。
新建VS工程,把lib加入链接器路径,libevent文件夹下的include文件夹拷贝过来,加入C++文件路径,并把libevent文件夹下的WIN32-Code\event2\event-config.h拷贝到include文件夹下,这样就ok了。
运行sample的代码:
#include "stdafx.h"#include <string.h>#include <errno.h>#include <stdio.h>#include <signal.h>#include <WinSock2.h>#pragma comment(lib, "ws2_32.lib")#include <event2/bufferevent.h>#include <event2/buffer.h>#include <event2/listener.h>#include <event2/util.h>#include <event2/event.h>static const char MESSAGE[] = "Hello, World!\n";static const int PORT = 9995;static void listener_cb(struct evconnlistener *, evutil_socket_t, struct sockaddr *, int socklen, void *);static void conn_read(struct bufferevent *bev, void *user_data);static void conn_writecb(struct bufferevent *, void *);static void conn_eventcb(struct bufferevent *, short, void *);static void signal_cb(evutil_socket_t, short, void *);int main(int argc, char **argv){WSADATA wsa_data;WSAStartup(0x0201, &wsa_data);struct event_base *base = event_base_new();if (!base) {fprintf(stderr, "Could not initialize libevent!\n");return 1;}struct sockaddr_in sin;memset(&sin, 0, sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(PORT);struct evconnlistener *listener = evconnlistener_new_bind(base, listener_cb, (void *)base, LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, -1, (struct sockaddr*)&sin, sizeof(sin));if (!listener) {fprintf(stderr, "Could not create a listener!\n");return 1;}struct event *signal_event = evsignal_new(base, SIGINT, signal_cb, (void *)base);if (!signal_event || event_add(signal_event, NULL) < 0) {fprintf(stderr, "Could not create/add a signal event!\n");return 1;}event_base_dispatch(base);evconnlistener_free(listener);event_free(signal_event);event_base_free(base);printf("done\n");return 0;}static void listener_cb(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *sa, int socklen, void *user_data){struct event_base *base = (event_base *)user_data;struct bufferevent *bev;bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);if (!bev) {fprintf(stderr, "Error constructing bufferevent!");event_base_loopbreak(base);return;}bufferevent_setcb(bev, conn_read, conn_writecb, conn_eventcb, user_data);bufferevent_enable(bev, EV_WRITE | EV_READ | EV_PERSIST);}static void conn_writecb(struct bufferevent *bev, void *user_data){struct evbuffer *output = bufferevent_get_output(bev);if (evbuffer_get_length(output) == 0) {printf("flushed answer\n");//bufferevent_free(bev);}}static void conn_read(struct bufferevent *bev, void *user_data){evutil_socket_t fd = bufferevent_getfd(bev);char cData[MAX_PATH] = {0};while (bufferevent_read(bev, cData, MAX_PATH) > 0){bufferevent_write(bev, MESSAGE, strlen(MESSAGE));}}static void conn_eventcb(struct bufferevent *bev, short events, void *user_data){if (events & BEV_EVENT_EOF) {printf("Connection closed.\n");}else if (events & BEV_EVENT_ERROR) {//printf("Got an error on the connection: %s\n", strerror(errno));/*XXX win32*/}/* None of the other events can happen here, since we haven't enabled* timeouts */bufferevent_free(bev);}static void signal_cb(evutil_socket_t sig, short events, void *user_data){struct event_base *base = (event_base *)user_data;struct timeval delay = { 2, 0 };printf("Caught an interrupt signal; exiting cleanly in two seconds.\n");event_base_loopexit(base, &delay);}
0 0
- windows下libevent VS2012编译
- windows下libevent VS2012编译
- Windows下编译libevent
- Windows下编译libevent
- libevent 库windows下编译
- [C++] 在windows下编译libevent 2.0
- libevent 在windows下的编译过程
- windows下编译及使用libevent
- windows下编译及使用libevent
- windows下编译及使用libevent
- windows下编译及使用libevent
- windows下编译及使用libevent
- VS2013 windows下编译及使用libevent
- windows下编译及使用libevent
- libevent 在windows下的编译过程
- windows下编译及使用libevent
- 【云隐】windows下编译及使用libevent
- windows下cmake+vs2012编译qtgstreamer
- 高级java程序员的必备面试知识点
- java基础知识
- elasticsearch intro
- 同源策略及规避方法
- Mybatis 的动态代理
- windows下libevent VS2012编译
- 批处理-获取当前文件目录下所有文件名
- bzoj 1095: [ZJOI2007]Hide 捉迷藏 (动态点分治)
- 几种保存Hive查询结果的方法
- UGUI 拖拽功能的实现
- 关于使用Axis2 webservice 处理Fault响应时抛org.apache.axis2.AxisFault的分析
- linux 安装 ftp 服务
- 解决iOS下cocos游戏重复启动的问题
- 矢量图学习(一)