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이벤트가 발생했을 때 함수를 빠져나온다. (논블로킹)