-
Notifications
You must be signed in to change notification settings - Fork 0
Study : CPP : poll
마석우 edited this page Apr 4, 2022
·
1 revision
| 항목 | 내용 |
|---|---|
| 일자 | 2022.03.31 |
| 작성자 | sma |
| 제목 | webserv 허용함수 - 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: 기다릴 이벤트,events는fd에 대해 어떤 이벤트를 감시하고자 하는지 커널에게 알려준다. -
revents:fd에 발생한 이벤트,poll함수가 반환될 때 커널은 각fd에 어떤 이벤트가 발생했는지revents에 해당하는events값을 설정한다. -
timeout: 지정한 시간(millisecond 단위)만큼 블록하게 된다. 0이면 즉시 반환, 음수면 무한 blocking
-
-
POLLIN: 읽을 데이터가 존재한다. -
POLLPRI: 시급히 읽을 자료가 존재한다. -
POLLOUT: 현재 쓰기가 가능하다. -
POLLRDNORM:POLLIN과 동일하다. -
POLLWRNORM:POLLOUT과 동일하다.
revents만 받을 수 있는 값
-
POLLERR: 오류 상황 -
POLLHUB: 연결이 끊겼다. -
POLLNVAL: 유효하지 않은 요청 (fd가 닫혀 있음)
man page