더북(TheBook)

이 작업을 해 주는 멋진 함수 이름은 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.length > 0)
          {
              print(data);
          }
          else if (result != EWOULDBLOCK)
          {
              // 소켓 오류 처리를 한다.
          }
      }
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.