哈希空间

写一个c语言使用epoll的例子代码

以下是一个使用epoll的简单示例,可以在Linux上运行:

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/epoll.h> #include <sys/socket.h> #include <netinet/in.h> #define MAX_EVENTS 10 int main() { int listen_sock, conn_sock, nfds, epollfd; struct epoll_event ev, events[MAX_EVENTS]; struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); char buffer[256]; // 创建监听套接字 if ((listen_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); exit(EXIT_FAILURE); } // 绑定地址和端口 addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(12345); if (bind(listen_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) { perror("bind"); exit(EXIT_FAILURE); } // 开始监听连接 if (listen(listen_sock, 1) < 0) { perror("listen"); exit(EXIT_FAILURE); } // 创建epoll实例 if ((epollfd = epoll_create1(0)) < 0) { perror("epoll_create1"); exit(EXIT_FAILURE); } // 添加监听套接字到epoll实例中 ev.events = EPOLLIN; ev.data.fd = listen_sock; if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) < 0) { perror("epoll_ctl: listen_sock"); exit(EXIT_FAILURE); } // 循环等待事件发生 while (1) { // 等待事件发生 if ((nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1)) < 0) { perror("epoll_wait"); exit(EXIT_FAILURE); } // 处理事件 for (int i = 0; i < nfds; i++) { if (events[i].data.fd == listen_sock) { // 有新连接请求 if ((conn_sock = accept(listen_sock, (struct sockaddr*)&addr, &addrlen)) < 0) { perror("accept"); exit(EXIT_FAILURE); } printf("New connection from %s:%d\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); // 添加新连接套接字到epoll实例中 ev.events = EPOLLIN; ev.data.fd = conn_sock; if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock, &ev) < 0) { perror("epoll_ctl: conn_sock"); exit(EXIT_FAILURE); } } else { // 有数据可读 int n = read(events[i].data.fd, buffer, sizeof(buffer)); if (n <= 0) { // 连接关闭或出错 printf("Connection closed\n"); close(events[i].data.fd); } else { // 打印收到的数据 printf("Received %d bytes: %.*s\n", n, n, buffer); } } } } return 0; }

这个示例程序创建一个TCP监听套接字,并使用epoll机制来等待连接请求和数据读取事件。当有新连接请求时,程序会接受连接并将新连接套接字添加到epoll实例中。当有数据可读时,程序会读取数据并打印收到的内容。当连接关闭时,程序会从epoll实例中删除该连接套接字。

本文 最佳观看地址:https://www.hashspace.cn/c-epoll-example.html 阅读 669

打开 哈希空间 微信小程序中查看更佳