0
点赞
收藏
分享

微信扫一扫

libevent (一)接口分析

林塬 2022-07-18 阅读 67


libevent 接口分析

libevent (一)接口分析_#endif


libevent 简单示例

#include <iostream>
#include <event2/event.h>
#include <string.h>
#include <event2/listener.h>

#define SPORT 8080

#ifndef _WIN32
#include <signal.h> //使用 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



举报

相关推荐

0 条评论