[关闭]
@guochy2012 2014-06-06T12:39:37.000000Z 字数 900 阅读 1409

epoll

未分类

  1. #define MAX_EVENTS 10
  2. struct epoll_event ev, events[MAX_EVENTS];
  3. int listen_sock, conn_sock, nfds, epollfd;
  4. /* Set up listening socket, 'listen_sock' (socket(),
  5. bind(), listen()) */
  6. epollfd = epoll_create(10);
  7. if (epollfd == -1) {
  8. perror("epoll_create");
  9. exit(EXIT_FAILURE);
  10. }
  11. ev.events = EPOLLIN;
  12. ev.data.fd = listen_sock;
  13. if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {
  14. perror("epoll_ctl: listen_sock");
  15. exit(EXIT_FAILURE);
  16. }
  17. for (;;) {
  18. nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
  19. if (nfds == -1) {
  20. perror("epoll_pwait");
  21. exit(EXIT_FAILURE);
  22. }
  23. for (n = 0; n < nfds; ++n) {
  24. if (events[n].data.fd == listen_sock) {
  25. conn_sock = accept(listen_sock,
  26. (struct sockaddr *) &local, &addrlen);
  27. if (conn_sock == -1) {
  28. perror("accept");
  29. exit(EXIT_FAILURE);
  30. }
  31. setnonblocking(conn_sock);
  32. ev.events = EPOLLIN | EPOLLET;
  33. ev.data.fd = conn_sock;
  34. if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,
  35. &ev) == -1) {
  36. perror("epoll_ctl: conn_sock");
  37. exit(EXIT_FAILURE);
  38. }
  39. } else {
  40. do_use_fd(events[n].data.fd);
  41. }
  42. }
  43. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注