ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • poll api 이벤트들
    프로그래밍/기록, 개념, 용어 2018. 4. 18. 11:43
    반응형

    PollFd.events 체크할 이벤트 목록을 지정한다. | 비트를 결합하여 여러 개를 있다.

     

    PollFd fd;
    fd.events = PollRdNorm | PollWrNorm;

     

    Poll 함수가 성공적으로 호출되면 revents 인자에 감지된 이벤트가 등록되어있다. 여러 개의 이벤트가 번에 등록되며, bit연산자 and(&) 통해 체크할 있다.

     

    Poll(fd);

    if(fd.revents & PollRdBand)
    {// RdBand 처리 ...
    }

    if(fd.revents & PollRdNorm)
    {// RdNormal 처리 ..
    }

     

    events revents 세팅되는 이벤트의 의미는 다음과 같다.

     

    PollIn : 높은 우선 순위가 아닌 데이터를 읽을 있다. 블러킹 없이

    PollPri: 높은 우선 순위 데이터를 읽을 있다. 블러킹 없이.

    PollOut: 파일 디스크립터에 있음.

    PollErr: 파일 디스크립터에 에러가 발생했다. 장치나 소켓에. 플래그는 events 지정하지 않았어도 항상 체크된다.

    PollHup: 디바이스나 소켓 연결이 끊겼다. 플래그는 events 지정하지 않았어도 항상 체크된다. PollHup PollOut 절대 동시에 세팅될 없다.

    PollNVal: 파일 디스크립터가 열리지 않았다. 플래그는 events 지정하지 않았어도 항상 체크된다.

    PollRdNorm: 일반 데이터를 읽을 있다. 블러킹 없이.

    PollRdBand: 0 아닌 우선 순위의 데이터를 읽을 있다. 블러킹 없이

    PollWrNorm: 일반 데이터를 있다. 블러킹 없이.

    PollWrBand: 0 아닌 우선 순위의 데이터를 있다 블러킹 없이.


    난 저 이벤트 중, Band가 붙은 이벤트 처리는 별도로 하지 않았다. 

    OOB 처리에 관한 Q&A: https://stackoverflow.com/questions/589928/socket-programming-how-do-i-handle-out-of-band-data

    결론: 서버-클라이언트 간 통신에서 서로 OOB를 주고 받지 않도록 했다면 별도의 Band 처리는 신경쓰지 않는다.

     

    지정하지 않아도 항상 체크되는 이벤트들(Err, Hup, NVal)은 항상 처리하도록 코드를 작성하자.

     

    if(fd.revents & PollHup)
    {// 연결 끊김 처리...
    }


    추가적으로 PollHup PollOut 동시에 설정될 없는 이유는 간단하다. 파일 디스크립터와 연결이 끊기면 파일 디스크립터에 없으니, 개가 함께 설정 된다면 그것이 오히려 모순이 되기 때문이다.


    반응형

    '프로그래밍 > 기록, 개념, 용어' 카테고리의 다른 글

    컴퓨터에서의 문자 표현  (0) 2020.05.28
    verbose 모드  (0) 2018.12.08
    난수 동기화  (0) 2018.02.06
    DNS와 DDNS  (0) 2017.05.13
    함수 호출 규약 vectorcall  (0) 2016.04.17
Designed by Tistory.