多路IO复用之epoll模型

#include
#include
#include
#include
#include
#include
#include 
#define PORT 8888
#define SIZE 2048
int main()
{
    int socketser,sockclient;
    int listenfd[SIZE];
    int treefd;
    char bufrec[1024];
    struct sockaddr_in addr,clientaddr;
    struct epoll_event tmp,epolle[SIZE];
    memset(listenfd,-1,sizeof(listenfd));
    socketser=socket(AF_INET,SOCK_STREAM,0);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    bind(socketser,(struct sockaddr*)&addr,sizeof(addr));
    listen(socketser,20);
    treefd = epoll_create(SIZE);
    tmp.events = EPOLLIN;
    tmp.data.fd = socketser;
    epoll_ctl(treefd,EPOLL_CTL_ADD,socketser,&tmp);
    int ret;
    while(1)
    {
        ret = epoll_wait(treefd,epolle,SIZE,-1);
        for(int n=0;n

多路io epoll模型与poll有很多相似之处,重点是三个函数epoll_create、epoll_ctl、epoll_wait ,注意的是epoll_event中data字段我们设置fd为要监听的fd,这样当有响应的时候我们就能获得具体的fd。epoll_create采用的是红黑树插入速度比数组快的多,有兴趣的可以去看看平衡二叉树,后续有时间我会写一些数据结构

你可能感兴趣的:(Linuxc)