windows操作系统上不能使用epoll模型,只能使用iocp网络模型。这里我把怎么在windows上使用iocp的代码直接贴上:
#include <iostream>
#include <signal.h>
#include <event2/event.h>
#include <event2/listener.h>
#include <event2/thread.h>
#define SPORT 5001
void listen_cb(struct evconnlistener* ev,
evutil_socket_t s,
struct sockaddr* addr,
int socketLen,
void* arg) {
std::cout << "listen_cb event_base_new success!" << std::endl;
}
int main()
{
#ifdef _WIN32
//windows初始化socket库
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
#else
//发送数据给已关闭socket时,忽略管道信息.
//否则可能导致程序dump.
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
return -1;
}
#endif
//创建配置上下文
event_config* conf = event_config_new();
//设置网络模型,使用select
//event_config_avoid_method(conf, "epoll");
//event_config_avoid_method(conf, "poll");
//window支持iocp
#ifdef _WIN32
event_config_set_flag(conf, EVENT_BASE_FLAG_STARTUP_IOCP);

这篇文章展示了如何在Windows操作系统上使用IOCP(I/O完成端口)网络模型,而不是不支持的epoll模型。通过libevent库,代码初始化了IOCP线程,并绑定了监听回调函数来处理连接。程序会根据系统信息设置CPU数量,并在任务管理器中显示相应的线程数。
最低0.47元/天 解锁文章
2099

被折叠的 条评论
为什么被折叠?



