libevent 接口分析
libevent 简单示例
#include#include #include #include #define SPORT 8080 #ifndef _WIN32 #include //使用 man signal 查找linux平台的头文件 #endif void listen_cb(struct evconnlistener* e, evutil_socket_t s, struct sockaddr* a, int socklen, void* arg) { std::cout << "listen_cb" << std::endl; } int main(int argc, char** argv) { #if _WIN32 //windowns 初始化socket库 WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa); #else //linux 忽略管道信号,发送数据给已关闭的socket if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) return 1; #endif event_base* base = event_base_new(); if (base) { std::cout << "event_base_new init successfuly!" << std::endl; } sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(SPORT); //监听端口(socket,bind,listen,绑定事件) evconnlistener* ev = evconnlistener_new_bind( base, // base上下文 listen_cb, // 接受连接的回调函数 base, // 回调函数获取的参数 LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, // 地址重用,evconnlistener关闭同时关闭socket 10, // 连接队列大小,对应listen函数 (sockaddr*)&sin, // b绑定地址与端口 sizeof(sin) ); // 事件分发处理 if (base) { event_base_dispatch(base); } if (ev){ evconnlistener_free(ev); } if (base) { event_base_free(base); } #ifdef _WIN32 WSACleanup(); #endif // _WIN32 return 0; }
windows:使用visual studio2019
linux:Makefile
testlibevent:main.cpp
g++ $^ -o $@ -levent
./$@
clean:
rm -rf testlibevent
rm -rf *.o
https://blog.csdn.net/qq_44647223/article/details/116398725



