SylixOS之epoll异常分析

  

<强> 1。SylixOS epoll介绍

,,,, SylixOS为了兼容Linux的epoll,创建了epoll的兼容子系统,并支持了epoll的部分功能.SylixOS epoll兼容子系统是由选择子系统模拟出来的,所以效率没有选择高。

<强> 2。epoll异常分析

<强> 2.1 epoll异常场景

,,,,在使用线程一创建AF_UNIX匿名套接字发送数据;线程B把套接字加入epoll监听,且设置属性为一次有效;线程C等待epoll事件产生,并读取套接字中的数据。如程序清单2 - 1所示。

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,程序清单,2 - 1 # include  & lt; stdio.h>   # include  & lt; sys/socket.h>   # include  & lt; netinet/in.h>   # include  & lt; arpa/inet.h>   # include  & lt; pthread.h>   # include  & lt; sys/epoll.h>   # define  READSIZE ,,,,,,,,,, 7   int ,,,, iEfd ,,,,,,,,,,,=,, 0;   int ,,,, iFd [2],,,,,,,,,,=, {0};      void  * send_data  (void  *参数)   {   ,,,int  iRet ,,=,,, 0;   ,,/*   ,,,,*,使用socketpair函数创造一对未命名的,相互连接的UNIX域套接字   ,,,,*,并且的在一端不断的发送数据   ,,,*/,,,iRet =, socketpair (AF_UNIX, SOCK_STREAM,, 0,, iFd);   ,,,if  (iRet  & lt;, 0), {   ,,,perror (“socketpair”);   ,,,return 零;   ,,,}   ,,,for  (,), {   ,,,,,,,写(iFd [0],,“SylixOS”, READSIZE);   ,,,,,,,睡眠(1);   ,,,}   }      void  * test_ctl (void  *参数)   {   ,,,struct  epoll_event ,,,,   ,,,int ,,,,,,,,,,,,,,,,,, iRet ,=, 0;   ,,,while  (1), {   ,,,/*   ,,,,,*,把套接字加入epoll监听,且设置监听属性为一次有效   ,,,,*/,,,,,,,,,=,event.events  0;   ,,,,,,,,,=,event.events  EPOLLIN  |, EPOLLONESHOT;   ,,,,,,,,,=,event.data.fd  iFd [1];   ,,,,,,,iRet =, epoll_ctl (iEfd, EPOLL_CTL_MOD,, iFd[1],,,事件);   ,,,,,,,if  (iRet ==, 0), {   ,,,,,,,,,,,printf (“test_ctl  ctl 好\ n”);   ,,,,,,,}   ,,,睡眠(1);   ,,}   }      void  * test_wait (void  *参数)   {   ,,,struct  epoll_event 事件;   ,,,int ,,,,,,,,,,,,,,, iRet ,,,,,,,,,,,=, 0;   ,,,char ,,,,,,,,,,,,,, cBuf [READSIZE],=, {0};   ,,,while  (1), {   ,,,/*   ,,,,,*,使用epoll等待事件,并读取数据。读取结束后等待下一次事件产生   ,,,,,*/,   ,,,iRet =, epoll_wait (iEfd,,,,, 1, 1);   ,,,if  (==iRet  1), {   ,,,,,,,printf (" test_wait  event.data.fd  is  % d  event.events  is  % x \ n”,   ,,,,,,,,event.data.fd event.events);   ,,,,,,,读(iFd [1],, cBuf,, READSIZE);   ,,,}   ,,,睡眠(1);   ,,,}   }   命令行参数个数,int 主要(int  char  * * argv)   {   ,,,pthread_t ,,,,,,,,,,,, send_tid,   ,,,,,,,,,,,,,,,,,,,,,,,,,wait_tid,   ,,,,,,,,,,,,,,,,,,,,,,,,,ctl_tid;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

SylixOS之epoll异常分析