epoll的優點在於可以支持大量的文件描述符
epoll相關的系統調用:
int epoll_create(int size);
參數size的含義我至今沒搞懂,如果大家有誰準確的知道的話請一定要留言!
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
epoll_wait在每一幀中都會別檢查指定的epfd上發生的事件,並且返回到events中,另外事件數量nev作爲返回值返回。
事件(部分)有:
EPOLLIN 可讀事件
EPOLLOUT 可寫事件
EPOLLRDHUP 對端關閉了套接字或者是關閉了寫通道(close(fd)或shutdown(fd, SHUT_WR))。
EPOLLPRI 有緊急數據可讀。
EPOLLERR 當文件描述符發生錯誤的時候,這個epoll總是會幫你設置好這個事件,所以你不需要再設置。
timeout的單位是毫秒。
需要注意的是epoll_wait會受到信號的干擾。
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
epoll_wait的控制碼:
EPOLL_CTL_ADD:將文件描述符綁定到epfd。
EPOLL_CTL_DEL:解除epfd和文件描述符之間的綁定。
EPOLL_CTL_MOD:修改某個文件關心的事件。