[1. 개요]
select() 함수는 비동기 I/O 처리를 위한 시스템 콜이다.
여러개의 파일 디스크립터(보통 소켓) 을 동시에 감시하면서, read/write/error 등의 상태를 체크한다.
함수 원형은 아래와 같다.
- int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
timeval 구조체의 내용을 채워, I/O 상태 변화를 timeout 동안 기다리고,
NULL 이면, blocking 으로 동작하고,
NULL 이 아니지만 0으로 채워져 있으면, non-blocking 으로 동작한다.
[2. 주의점]
위 함수 사용 시 주의할 점은 첫번째 파라미터이다.
리눅스 커널에서는, readfds , writefds , exceptfds 의 설정 된 파일 디스크립터 중
가장 큰 값을 갖는 file descriptor + 1 로 설정해야 한다.
반면, 윈도우 OS 에서는 이 값이 큰 의미가 없다.
따라서, 이식성이 높은 코드를 작성하기 위해서는 nfds 의 값을 리눅스 사용 방식을 준수해서 설정하는 편이 낫다.
[3. 기타]
nfds = 0 및 세가지 fds 들이 empty 하고 timeout 을 설정하면 sleep() 을 대체하는 방법이 되기도 한다.
'C++' 카테고리의 다른 글
std::bind (0) | 2025.04.28 |
---|---|
bitfield 사용 시 유의할 점 (0) | 2025.04.28 |
구조체 대입 연산 (0) | 2025.04.15 |
Segmentation fault 사례4 (0) | 2025.04.14 |
Segmentation fault 사례3 (0) | 2025.04.14 |