我想在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)