小编Dan*_*iel的帖子

带epoll的多线程UDP服务器?

我想在C/Linux中开发一个多线程UDP服务器.该服务在单个端口x上运行,因此只能将单个UDP套接字绑定到它.为了在高负载下工作,我有n个线程(静态定义),比如说每个CPU 1个线程.可以使用epoll_wait将工作传递给线程,因此线程可以通过'EPOLLET |按需唤醒 EPOLLONESHOT".我附上了一个代码示例:

static int epfd;
static sig_atomic_t sigint = 0;

...

/* Thread routine with epoll_wait */
static void *process_clients(void *pevents)
{
    int rc, i, sock, nfds;
    struct epoll_event ep, *events = (struct epoll_event *) pevents;

    while (!sigint) {
        nfds = epoll_wait(epfd, events, MAX_EVENT_NUM, 500);

        for (i = 0; i < nfds; ++i) {
           if (events[i].data.fd < 0)
                continue;

           sock = events[i].data.fd;

           if((events[i].events & EPOLLIN) == EPOLLIN) {
               printf("Event dispatch!\n");
               handle_request(sock); // do a recvfrom
           } else
               whine("Unknown …
Run Code Online (Sandbox Code Playgroud)

c linux udp epoll

8
推荐指数
1
解决办法
9957
查看次数

标签 统计

c ×1

epoll ×1

linux ×1

udp ×1