윈도우 iocp 의 PostQueuedCompletionStatus 함수를 epoll에서 구현하고 싶은데요...
글쓴이: iwyou282 / 작성시간: 수, 2013/07/03 - 12:18오후
매일 눈팅만 하다가 처음으로 이렇게 글올려 봅니다.
윈도우 환경에서 개발하다가 처음으로 리눅스용 서버를 제작하고 있는 개발자입니다.
윈도우의 IOCP와 비슷한 형태의 처리방식이 리눅스의 epoll 이라 알고있습니다.
그래서 epoll을 IOCP에서 처리했던 형태와 비슷한 구조로 만들어 보고자 합니다.
WorkEpoll / ParseEpoll / DBEpoll / SendEpoll ( epoll 오브젝트 )
work_fd / par_fd / db_fd / snd_fd ( 메시지 처리를 위한 fd )
ex)WorkEpoll -> ParseEPoll ( 메시지 전달 )
static bool PushOperation( int epoll_descriptor, int fd, struct epoll_event *ev ) { if( epoll_ctl( epoll_descriptor, EPOLL_CTL_MOD, fd, ev ) == -1 ) { perror( "Could not Pushoperation event..." ); return false; } return true; } struct epoll_event ev; ev.data.fd = par_fd; ev.data.ptr = (void*)packetbuffer; ev.events = EPOLLIN || EPOLLET; PushOperation( ParseEpoll_fd, par_fd, &ev );
위와 같이 epoll을 여러 작업에 활용하여 이벤트와 메시지형태의 처리를 활용한 서버를 만들어 보려고 하는데요.
epoll_ctl함수의 EPOLL_CTL_MOD 플레그를 활용하여 이벤트를 발생시키는 형태로 구현해 보았습니다.
문제는 처음 linux 환경에서 서버를 개발하다보니 epoll_ctl 함수를 이용한 이벤트 처리가 서버에 오버헤드나 그밖에 문제의 소지가 있는지
여부가 궁금하네요.
Forums:
댓글 달기