一个简单的epoll测试例子

一段简单的epoll测试例子,香港服务器,编译运行后可以直接用浏览器访问localhost来测试。

1 #include <unistd.h> 2 #include <sys/socket.h> 3 #include <sys/epoll.h> 4 #include <arpa/inet.h> 5 #include <netinet/in.h> 6 #include <fcntl.h> 7 #include <string.h> 8 #include <stdlib.h> 9 #include <stdio.h>10 #include <stdint.h>11 #include <errno.h>12 #include <signal.h>content[] = ;15 char response[512];rep_err(char *err)19 {, err););22exit(-1);23 }setnonblock(int fd)27 {28if(fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK) < 0)29return -1;;31 }main(int argc, char *argv[])36 {37struct sockaddr_in servaddr, cliaddr;38 socklen_tclilen;39 uint32_tlistenfd, connfd, efd, err, n, i;40charbuffer[1024];41struct epoll_event ev, events[256];42 43 signal(SIGPIPE, SIG_IGN);, strlen(content), content);((listenfd = socket(AF_INET, SOCK_STREAM, 0)) <= 0));49 50bzero(&servaddr, sizeof(servaddr));51servaddr.sin_family = AF_INET;52servaddr.sin_addr.s_addr = htonl(INADDR_ANY);53servaddr.sin_port = htons(80);((err = bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) != 0));((err = listen(listenfd, 6)) != 0));60 61 setnonblock(listenfd);62 63efd = epoll_create(256);64ev.data.fd = listenfd;65ev.events = EPOLLIN | EPOLLET;66epoll_ctl(efd, EPOLL_CTL_ADD, listenfd, &ev);(;;)69 {70n = epoll_wait(efd, events, 256, -1);71for(i = 0; i < n; ++i)72 { 73if(events[i].data.fd == listenfd)74 {75clilen = sizeof(cliaddr);76if((connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen)) <= 0));, 79inet_ntop(AF_INET, &cliaddr.sin_addr, buffer, sizeof(buffer)),80 ntohs(cliaddr.sin_port));81 setnonblock(connfd);82ev.data.fd = connfd;83ev.events = EPOLLIN |EPOLLET;84epoll_ctl(efd, EPOLL_CTL_ADD, connfd, &ev);85 }{88 write(events[i].data.fd, response, strlen(response));89 write(events[i].data.fd, content, strlen(content));90 }91 }92 };94 }

,香港虚拟主机,香港虚拟主机只有经历过地狱般的折磨,才有征服天堂的力量,只有流过血的手指,才能弹出世间的绝唱。

一个简单的epoll测试例子

相关文章:

你感兴趣的文章:

标签云: