본문 바로가기
카테고리 없음

끄적끄적...

by Joseph.Lee 2017. 11. 29.

Non-blocking socket에서 recv하는 도중 -1리턴과 함께 errno==EAGAIN이면 더이상 읽을 데이터가 없단 뜻..


epoll & tcp listen socket 사용시 EPOLLET(Edge trigger)사용시 epoll_wait을 통해 이벤트 받았을 때 한번씩만 accept하면 accept못하는 클라이언트 발생.

(확인안해봄) EAGAIN이 나올때까지 accept하거나

Listen socket에는 Edge trigger을 사용하지 않고 그냥 Level trigger만 사용.

당연히 Receive에는 ET사용.


epoll사용시 같은fd에 대한 이벤트가 여러Thread에서 처리될 수 있다.

이런경우 순서의 문제 등이 발생할 수 있는데 EPOLLONESHOT을 통해 이러한 문제가 해결 가능하다.

해당 이벤트 처리 후 EPOLL_CTL_MOD 을 통해 다시 이벤트를 등록해야 한다.


이벤트 처리중 ~ EPOLL_CTL_MOD 중간에 또다시 event가 발생한다면?(데이터 수신이 일어난다면?)

문제없다. EPOLL_CTL_MOD 등 이벤트를 등록할때 수신큐를 확인해서 이벤트를 등록한다고 한다.

반응형

댓글