POSIX select()는 실제로 언제 반환됩니까?

POSIX select()는 실제로 언제 반환됩니까?

POSIX 인터페이스를 사용하여 소켓 프로그래밍을 하고 있습니다. 비차단 소켓이 읽기/쓰기 준비가 되었는지 모니터링하기 위해 select() 함수를 사용하려고 합니다.

select() 함수를 사용할 때 읽기 및 쓰기 파일 설명자 세트를 제공합니다. 특히 소켓 fd가 있고 읽기 및 쓰기가 가능한지 확인하고 싶습니다.

이것POSIX 문서반환 값은 모든 fd 세트에 있는 모든 파일 설명자의 합계로 선언됩니다.

내 초기 테스트에서는 "2"를 얻은 것으로 나타났습니다. 이는 좋은 결과입니다(내 소켓이 읽기 및 쓰기 가능하다는 의미). 하지만 파일 설명자가 동시에 읽기/쓰기 가능해지지 않으면 어떻게 될까요? 쓰기 가능해지기 전에 마이크로초 동안 읽을 수 있게 되었다고 가정해 볼까요? 무슨 일이야? 그냥 1을 반환하나요?

답변1

select()하나 이상의 파일 설명자가 읽기 또는 쓰기 준비가 되었을 때, 시간 초과에 도달했을 때, 신호에 의해 중단되었을 때 반환됩니다.

이는 최소한 하나의 파일 설명자가 읽거나 쓸 준비가 되었는지 확인한 후 select()지정된 파일 설명자 세트(이러한 세트는 수정됨)를 테스트 해야 함을 의미합니다 .select()

성공적으로 완료되거나 기능이 완료 pselect()되면select()readfdswritefds및 인수가 가리키는 객체는 errorfds각각 어떤 파일 설명자가 읽기 준비가 되었는지, 쓸 준비가 되었는지 또는 보류 중인 오류 조건이 있는지 나타내기 위해 수정되어야 하며 , 모든 출력 세트에서 준비된 설명자의 총 수를 반환해야 합니다.보다 작은 각 파일 설명자에 대해 nfds해당 비트는 입력 시 설정되고 해당 파일 설명자에 대한 관련 조건이 true인 경우 성공적인 완료 시 설정됩니다.

(에서POSIX 문서select())

읽고 쓰기 위해 파일 설명자를 열어야 하는 경우 select()두 조건이 모두 충족될 때까지 반복해야 합니다.

관련 정보