[ Guru ] in KIDS 글 쓴 이(By): guest (jin) <host.mic.go.kr> 날 짜 (Date): 1998년 8월 12일 수요일 오후 05시 23분 57초 제 목(Title): Re: [Q]소켓에서 select()와 accept()의 차� 원론적으로 프로그램의 컨텍스트에 관련된 문제입니다. 만약 accept를 받아들이는 서버가 client의 connect()를 기다림과 동시에 다른 입출력을 하고자 한다면. 그러니까 입력의 발생지가 2곳 이상 이라면 ------------------------> accept ------------------------> other 이렇게 되면 서버는 어느 한곳에서 데이터가 발생하기를 무한정 기다릴 수가 없게 되죠 ( other에서 들어 오는 데이터도 읽어야 하니까 ) 그렇다구 모든 file descriptor를 nonblock으로 설정하고 loop를 돌릴 수도 없고 --- 이렇게 해두 되긴 하지만 프로그램이 시스템 자원을 무지 많이 잡아 먹겠죠 -- 그래서 select를 쓰는 겁니다. select에서는 읽고자하는 file descriptor들을 한꺼번에 모니터링 해줍니다. 그러니까 데이터가 발생하면 즉시 return 하게 되는 거죠. select()가 return 하면 어떤 file descriptor에서 데이터가 발생했는지를 검사 해 봐야 겠죠... 그런다음 실제로 그데이터를 읽어 오게 되는 겁니다. |