Computer Science 기본 지식/소켓 프로그래밍

[게임 서버 프로그래밍 교과서] Poll을 이용한 논블로킹 서버

로파이 2021. 8. 19. 12:29

다수 클라이언트를 처리하는 논블로킹 소켓을 이용한 서버 예제

 

-- msdn 참고

POLL_FD 구조체

typedef struct pollfd

{

  SOCKET fd;

  SHORT events;

  SHORT revents;

}

WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD;

  • fd에 소켓 핸들을 대입
  • events에는 관찰하고자 하는 I/O에 대한 Flag를 설정한다.
  • revents는 해당 I/O 이벤트 발생시 해당 Flag가 설정되어 있다.
Flag Description
POLLPRI Priority data may be read without blocking. This flag is not supported by the Microsoft Winsock provider.
POLLRDBAND Priority band (out-of-band) data can be read without blocking.
POLLRDNORM Normal data can be read without blocking.
POLLWRNORM Normal data can be written without blocking.

 

WSAPOLL

int WSAAPI WSAPoll( LPWSAPOLLFD fdArray, ULONG fds, INT timeout );

관찰하고자 하는 소켓 디스크립터 배열을 전달한다. timeout을 지정하여 일정 시간 동안 이벤트가 발생하지 않거나 I/O이벤트가 발생했을 때 함수를 빠져나온다. (논블로킹)

 

POLL