티스토리 뷰

poll은 select 와 거의 유사하다.

POLLRDNORM - 노말한 데이터가 들어 왔다는 이벤트를 의미한다.

select는 소켓 이외의 파일도 readable 또는 writable을 검사 했지만 poll은 소켓에 대해서만 검사한다.

그리고 어떤 이벤트가 발생했을때 깨어나야 한다는것을 매개변수로 설정할수 있다. 

select에서는 read라는 이벤트가 발생했을때 깨어나야할 소켓들은 read전용 보따리에 담고 write는 write 전용 보따리에 담았었다.


하지만 poll에서는 블락에서 깨어나는 이벤트를 소켓별로 따로따로 설정할 수 있다.


위의 프로그램은 앞 포스팅에서 사용했었던 에코 서버 프로그램인데 select를 poll로만 변경해 준것 이다.


limits.h 헤더파일에 포함된 OPEN_MAX는 256으로 정해져 있다.

pollfd 구조체형 배열인 client를 크기 256로 정해서 선언하게 된다. -> 서버 프로그램은 최대 256개의 소켓을 관리하겠다는 의미.

그리고 나서 리슨 소켓을 만든다.


20번 21번 줄

리슨 소켓을 검사할것이고 POLLRDNORM이라는 이벤트가 발생하면 poll시스템 콜을 블락에서 깨우겠다.

다시 말해서 리슨 소켓에 정상 데이터가 들어오면(정상 연결 요청) 블락에서 깨어나겠다.


0번 인덱스를 제외한 나머지 1~255인덱스의 파일 디스크립터에는 -1을 설정하도록 한다.

시스템에서 fd가 음수로 설정되어 있는 구조체는 무시되기 때문에 아무일도 하지 않는다.



첫번째 반복에서는 client[0]에만 유효한 값이 있다. 27~42줄 까지는 리슨 소켓때매 깬 경우를 처리해 주는 부분이다.







 



댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함