-
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