소켓 프로그래밍에서 select () 함수를 사용하는 방법은 무엇입니까?
-
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()
전혀 점검되지 않으므로 통화가 반환 될 때 세트에 나타날 수 없습니다.
다른 팁
나는 한때 당신과 같은 의심을 가졌습니다. 다음 질문과 답변을 볼 수 있습니다.
제휴하지 않습니다 StackOverflow