에 대한 참고자료poll()
그냥 말해 "지정된 fd 값이 잘못되었습니다. 이 플래그는 revents 멤버에서만 유효합니다. events 멤버에서는 무시해야 합니다.".
이것은 불분명합니다(적어도 나에게는). 파일 설명자가 유효하지 않은 경우 폴링에서 오류(음수 반환 값)를 반환하면 안 되나요?
나는 같은 문제가 있었고 POLLERR
어딘가에서 장치나 네트워크의 버그를 나타낼 수 있다는 것을 읽었습니다. 이것은,, POLLNVAL
미스터리로 남아있습니다.
사례 사례를 아는 사람이 있나요?
답변1
POLLNVAL
파일 설명자 번호가 파일 설명자와 일치하지 않는 경우 이 값이 설정됩니다.
poll
오류를 반환하는 대신 이 동작을 선택한 이유가 무엇인지 잘 모르겠습니다 . 그 이유는 아마도 구현이 용이하기 때문일 것입니다. struct pollfd
배열의 일부 요소는 수정되었지만 다른 요소는 수정되지 않은 조기 반환을 처리할 필요 없이 구현이 배열을 한 번 반복할 수 있게 해줍니다 .
그 이유는 프로그래머의 편의성 때문일 수도 있습니다. 잘못된 파일 설명자를 호출하는 것은 오류가 아니므로 poll
파일 설명자를 닫고 배열에 계속 포함할 수 있습니다. 이러한 편리함은 제한적입니다. 다른 파일을 열지 않는 한(파일 설명자를 재사용할 수 있으므로) 이 작업을 수행할 수 있으며 배열 요소에 대해 여전히 (작은) 성능 패널티를 지불해야 합니다. 이는 한 스레드가 호출을 close
수행하는 동안 다른 스레드가 poll
호출을 수행하거나 호출을 시도하는 다중 스레드 프로그램에 유용합니다 . 이는 버그가 아니며 폴링 스레드는 open
.