이 작업을 해 주는 멋진 함수 이름은 select() 혹은 poll()입니다. 이 두 함수 중 여러분이 쓰기 편한 것을 사용하면 됩니다. 이 예시 코드는 ➋에서 별다른 처리 없이 바로 루프를 반복합니다. 따라서 CPU 폭주가 발생합니다. 여기에 select() 함수를 적용해 봅시다.
List<Socket> sockets; void NonBlockSocketOperation() { while (true) { // 100밀리초까지 대기 ➊ // 1개라도 I/O 처리를 할 수 있는 상태가 되면 // 그 전에라도 리턴 select(sockets, 100ms); foreach(s in sockets) { // 논블록 수신 ➋ (result, data) = s.receive(); if (data. > 0) { print(data); } else if (result != EWOULDBLOCK) { // 소켓 오류 처리를 한다. } } } }