글쓴이: Stephen Kyoungw... / 작성시간: 금, 2020/05/29 - 6:50오전
select는 열린 파일들의 집합을 parameter로 받습니다. 극단적으로 단순화하면, select를 부르면 블록이 되고, 그 열린 파일들 중 하나 또는 그 이상에 어떤 이벤트 (쓸 준비가 되었다거나 읽을 준비가 되었다거나 등)가 발생하면, 리턴을 합니다. 리턴이 되면, 프로그래머는 그 열린 파일들 집합을 일일이 체크해서 이벤트가 있는지 여부를 확인한 후, 있으면 그에 맞게 핸들링을 해주면 됩니다. 다 핸들링이 되면 다시 select를 부르면 되고, 이걸 반복합니다.
udp와 tcp를 열어놓고, 예컨대 udp 접속이 미리 들어와서 한참 데이터를 주고 받다가 tcp 접속이 들어올 수도 있고 아닐 수도 있다면, 최소한 두 개의 쓰레드는 필요할 거고요. 둘다 열고 둘다 접속을 받은 다음에, 나중에 데이터를 주고 받는 구조라면, select가 들어가는 룹 앞에 접속을 받고, 파일들을 select가 모니터링할 집합에다 넣어주는 게 뼈대일 것 같네요.
개념은
select는 열린 파일들의 집합을 parameter로 받습니다. 극단적으로 단순화하면, select를 부르면 블록이 되고, 그 열린 파일들 중 하나 또는 그 이상에 어떤 이벤트 (쓸 준비가 되었다거나 읽을 준비가 되었다거나 등)가 발생하면, 리턴을 합니다. 리턴이 되면, 프로그래머는 그 열린 파일들 집합을 일일이 체크해서 이벤트가 있는지 여부를 확인한 후, 있으면 그에 맞게 핸들링을 해주면 됩니다. 다 핸들링이 되면 다시 select를 부르면 되고, 이걸 반복합니다.
udp와 tcp를 열어놓고, 예컨대 udp 접속이 미리 들어와서 한참 데이터를 주고 받다가 tcp 접속이 들어올 수도 있고 아닐 수도 있다면, 최소한 두 개의 쓰레드는 필요할 거고요. 둘다 열고 둘다 접속을 받은 다음에, 나중에 데이터를 주고 받는 구조라면, select가 들어가는 룹 앞에 접속을 받고, 파일들을 select가 모니터링할 집합에다 넣어주는 게 뼈대일 것 같네요.
댓글 달기