FrontPage|FindPage|TitleIndex|RecentChanges|RSS Epoll Class
 
ÀÌÁ¦´Â, ´Ù¸¥ ÇÁ·Î±×·¡¸Ó°¡ epollÀÌ ¹ºÁö ¸ô¶óµµ ÀÌ ÁÁÀº ¼º´ÉÀ» ¸¾²¯ ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï Ãß»óÈ­¸¦ ½ÃÄѾ߰ڴÙ.

1 Class ¼³°èÀÇ °í¹Î
1.1 ?TEpoll constructor & destructor ±¸Çö
1.2 Add() ¿Í Delete() ÀÇ ±¸Çö
1.3 Do() ÇÔ¼öÀÇ ±¸Çö

1 Class ¼³°èÀÇ °í¹Î #

³×Æ®¿öÅ© ¼­¹öµµ Çϵµ °¡Áö°¡Áö¶ó¼­, ¾î¶² ¼³°è¸¦ ÇÒ Áö °í¹ÎÀ» ÇØ ºÃ´Ù. ¿©·¯°¡Áö ¹æ¹ýµéÀÌ ÀÖ°ÚÁö¸¸, ´ÜÁö EpollÇÔ¼öµéÀ» Ãß»óÈ­Çϵµ·Ï ¸¸µé¾î º¸±â·Î Çß´Ù.

  1. ÇÁ·Î±×·¡¸Ó°¡ ¼±È£ÇÏ´Â ¼ÒÄÏÀ̺¥Æ® ó¸® ½ÃÁ¡, Áï epoll_wait ¸¦ ÄÝ ÇÏ´Â ½ÃÁ¡ÀÌ »ç¶÷¸¶´Ù ´Ù¸¦ ¼ö Àֱ⠶§¹®¿¡, Do ¶ó´Â º°µµ public ÇÔ¼ö¸¦ ¸¸µé¾î¼­ ÄÝÇϵµ·Ï ÇÑ´Ù.
  2. epoll¿¡ °ü½É fd ¸¦ Ãß°¡Çϰųª »èÁ¦ÇÏ´Â °ÍÀº ¸ðµÎ ¼öµ¿À¸·Î ÇÑ´Ù.
  3. listen ¼ÒÄÏÀÇ eventó¸®, Áï acceptµµ µû·Î ó¸®ÇÑ´Ù.
class TEpoll
{
private :
    int fd_epoll;

public :
    bool is_epoll_init;
    
    TEpoll(const int size);
    ~TEpoll(); 
            
    int Add(const int fd);
    int Delete(const int fd);
    
    int Do(TPEpollEvent events, const int nwait);
};  

1.1 ?TEpoll constructor & destructor ±¸Çö #

»ý¼ºÀÚ¿Í ¼Ò¸êÀÚ ±¸ÇöÀº Ưº°ÇÒ¸¸ÇÑ°Ô ¾ø´Ù. »ý¼ºÀÚ¿¡¼­´Â epoll_create ÇØÁÖ°í, ¼Ò¸êÀÚ¿¡¼­´Â fd_epoll ¿¡ ´ëÇؼ­ close 󸮸¦ ÇØÁØ´Ù. °¢ fd¸¶´Ù epoll¿¡¼­ deleteÇÒ ÇÊ¿ä´Â ¾ø°í, °¢ fdÀÇ close´Â »ç¿ëÀÚ°¡ ¾Ë¾Æ¼­ ÇØÁà¾ß ÇÑ´Ù ;)
TEpoll::TEpoll(const int size)
{
    is_epoll_init = (fd_epoll = epoll_create(size)) > 0);
}

TEpoll::~TEpoll()
{
    if(is_epoll_init) close(fd_epoll);
} 

is_epoll_init boolean º¯¼ö¸¦ µÎ¾î, ÃʱâÈ­ ½ÇÆнà ´ëÀÀÇϵµ·Ï ÇÏ¿´´Ù. ÃʱâÈ­º¯¼ö size´Â ÃÖ´ë µ¿Á¢¼ö¸¦ ÀǹÌ.


1.2 Add() ¿Í Delete() ÀÇ ±¸Çö #

// ÀϺΠtypedef
typedef struct epoll_event TEpollEvent;
typedef TEpollEvent * TPEpollEvent;

int TEpoll::Add(const int fd)
{       
    if(! is_epoll_init) return -1;
    TEpollEvent ev;
                
    ev.events  = EPOLLIN | EPOLLOUT | EPOLLERR | EPOLLET;
    ev.data.fd = fd;
                
    return epoll_ctl(fd_epoll, EPOLL_CTL_ADD, fd, &ev);
}       

int TEpoll::Delete(const int fd)
{       
    if(! is_epoll_init) return -1;
    TEpollEvent ev;
        
    ev.events  = EPOLLIN | EPOLLOUT | EPOLLERR;
    ev.data.fd = fd;
        
    return epoll_ctl(fd_epoll, EPOLL_CTL_DEL, fd, &ev);
} 

1.3 Do() ÇÔ¼öÀÇ ±¸Çö #

Do ÇÔ¼ö´Â, Ŭ·¡½º ¿ÜºÎ¿ÍÀÇ °¡Àå Áß¿äÇÑ ÀÎÅÍÆäÀ̽º ÇÔ¼ö·Î ¼³°èÇß´Ù. »ç¿ëÀÚ(ÇÁ·Î±×·¡¸Ó)´Â Àû´çÈ÷ fdµéÀ» »ý¼ºÇؼ­ TEpoll:?:Add()¸¦ ÅëÇØ epollÀÇ °ü½Éfd·Î µî·ÏÀ» ÇÏ°í, ÀÌ Do ÇÔ¼ö¸¦ ÅëÇØ À̺¥Æ®°¡ ¹ß»ýÇÑ fdµéÀ» ¾Ë¾Æ³»µµ·Ï ÇÑ´Ù.
int TEpoll::Do(TPEpollEvent events, const int nwait)
{
    if(! is_epoll_init) return -1;
    return epoll_wait(fd_epoll, events, MAX_EVENTS, nwait);
}

last modified 2004-06-19 13:22:47
EditText|FindPage|DeletePage|LikePages|