select함수를 이용해서 udp서버와 tcp서버를 하나로 만들어야 하는데

익명 사용자의 이미지

select함수를 이용해서 udp서버와 tcp서버를 하나로 만들어야 하는데 어떻게 해야할지 하나도 모르겠습니다. ㅠㅠ 단 멀티스레드는 최소로 사용해 여러 TCP 클라이언트와 UDP클라이언트를 서비스할 수 있어야 한다고 하는데 알려주실 분 있으신가요?? ㅠㅠ

Stephen Kyoungwon Kim@Google의 이미지

select는 열린 파일들의 집합을 parameter로 받습니다. 극단적으로 단순화하면, select를 부르면 블록이 되고, 그 열린 파일들 중 하나 또는 그 이상에 어떤 이벤트 (쓸 준비가 되었다거나 읽을 준비가 되었다거나 등)가 발생하면, 리턴을 합니다. 리턴이 되면, 프로그래머는 그 열린 파일들 집합을 일일이 체크해서 이벤트가 있는지 여부를 확인한 후, 있으면 그에 맞게 핸들링을 해주면 됩니다. 다 핸들링이 되면 다시 select를 부르면 되고, 이걸 반복합니다.

udp와 tcp를 열어놓고, 예컨대 udp 접속이 미리 들어와서 한참 데이터를 주고 받다가 tcp 접속이 들어올 수도 있고 아닐 수도 있다면, 최소한 두 개의 쓰레드는 필요할 거고요. 둘다 열고 둘다 접속을 받은 다음에, 나중에 데이터를 주고 받는 구조라면, select가 들어가는 룹 앞에 접속을 받고, 파일들을 select가 모니터링할 집합에다 넣어주는 게 뼈대일 것 같네요.