select 和 epoll 区别

来源:互联网 发布:python怎么下载库 编辑:程序博客网 时间:2024/05/05 17:03



select 和 epol 都是用来监听套接字上是否有事情发生,

select 采用轮询方式,epoll 是触发方式,用回调把信息赋给event机构体


select : 轮询检查文件描述符集合, 实现方式:


fd_set fdRead;


FD_ZERO(&fdRead); // 将文件描述符集合清零


FD_SET(iSocket,&fdRead);  // 将文件描述符iSocket添加到fdRead中,可以添加多个


// select ,设置recv 超时时间


int iRet = select(iSocket+1,&fdRead,NULL,NULL,&tvTimeOUt);

swtich(iRet)

{

        case 0:

                printf("Time out\n");

               return -1;

       case -1:

              printf("Select Error\n");

              return -2;

       default:

             if(FD_ISSET(iSocket,&fdRead)) // 测试iSocket 是否在描述符集合中

            {

                    iRecvLen = recv(iScoket,pcRecvBuf,iBufLen,0);

                    if(iRcvLen == -1)

                   {

                              printf("Recv error\n");

                              return -3;

                  }

                 else if( 0 == iRevLen)

                {

                        printf("Scoket close\n");

                       return -4;

               }

              else{

                          break;

               }

     }

如果文件描述符中有多个socket,便会轮询检查


 epoll:

epool 的使用,首先通过epoll_create创建一个epoll对象,得到一个epoll的描述符,

我们需要监听那个fd上的事件通过epoll_ctl,最后epoll_wait会返回发生了事件的数目


       

 

 


 

 

 


 

 

 


 

 

 

 


 

 

 

 


 

 

 


 

 

 


 

如果文件描述符中有多个

socket

,便会轮询检查。


}
















0 0
原创粉丝点击