소켓 프로그래밍에서 select () 함수를 사용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/851759

  •  21-08-2019
  •  | 
  •  

문제

프로토 타입은 다음과 같습니다.

int select (int nfds,
            fd_set *read-fds,
            fd_set *write-fds,
            fd_set *except-fds,
            struct timeval *timeout);

나는이 기능을 꽤 오랫동안 이해하기 위해 고군분투하고 있습니다. 내 질문은 모든 파일 설명자를 0에서 NFDS-1로 확인하고 리턴시 read-fds, write-fds 및 propds를 수정하면 fd_set을 사용하여 세트에 파일 설명자를 추가 해야하는 이유입니다. 처음에는 모든 파일 설명자를 확인하겠습니까?

도움이 되었습니까?

해결책

0에서 확인하지 않습니다 nfds-1. 첫 번째 인수는 사용 된 파일 디스크립터가 수치 적으로 얼마나 크고, 수치 적으로 상한을 제공합니다. 이는 세트 자체가 실제로 얼마나 많은 비트를 사용하는지 알 수있는 방법없이 비트 벡터로 표시 될 수 있기 때문입니다. 이것을 별도의 인수로 지정하면 도움이됩니다 select() 사용하지 않는 파일 설명자를 확인하지 마십시오.

또한, 전화 할 때 읽기 세트에없는 디스크립터 select() 전혀 점검되지 않으므로 통화가 반환 될 때 세트에 나타날 수 없습니다.

다른 팁

나는 한때 당신과 같은 의심을 가졌습니다. 다음 질문과 답변을 볼 수 있습니다.

선택 시스템 호출에 대한 쿼리

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top