Skip to content

Study : CPP : poll

마석우 edited this page Apr 4, 2022 · 1 revision
항목 내용
일자 2022.03.31
작성자 sma
제목 webserv 허용함수 - poll
한줄요약 멀티 플렉싱 관련 함수

poll

select 와 비슷한 기능을 하는 함수로 지정한 소켓의 변화를 확인하는데 사용하는 함수

#include <poll.h>

int poll(struct pollfd *fds, nfds_t nfds, int timeout)
  • fds : 검사할 pollfd 배열
  • nfds : fd 의 개수
  • timeout : 지정한 시간(millisecond 단위)만큼 블록하게 된다. 0이면 즉시 반환, 음수면 무한 blocking
리턴값 내용
1 이상 event가 발생한 fd의 개수를 의미
0 timeout
-1 오류 발생
  • pollfd 구조체

    struct pollfd{
    	int fd;
    	short events; 
    	short revents;
    }
    • fd : 확인할 파일 디스크립터, 음수이면 무시된다.
    • events : 기다릴 이벤트, eventsfd 에 대해 어떤 이벤트를 감시하고자 하는지 커널에게 알려준다.
    • revents : fd 에 발생한 이벤트, poll 함수가 반환될 때 커널은 각 fd 에 어떤 이벤트가 발생했는지 revents 에 해당하는 events값을 설정한다.
    • timeout : 지정한 시간(millisecond 단위)만큼 블록하게 된다. 0이면 즉시 반환, 음수면 무한 blocking

event 값

  • POLLIN : 읽을 데이터가 존재한다.
  • POLLPRI : 시급히 읽을 자료가 존재한다.
  • POLLOUT : 현재 쓰기가 가능하다.
  • POLLRDNORM : POLLIN 과 동일하다.
  • POLLWRNORM : POLLOUT 과 동일하다.

revents만 받을 수 있는 값

  • POLLERR : 오류 상황
  • POLLHUB : 연결이 끊겼다.
  • POLLNVAL : 유효하지 않은 요청 (fd가 닫혀 있음)

man page

https://wariua.github.io/man-pages-ko/poll%282%29/