내 소켓 간의 통신을 위해 선택 기능을 사용하고 있습니다. while 루프를 사용하고 있습니다. -루프 내부의 select()에 대한 FD_SET/FD_ZERO가 필요한 이유는 무엇입니까?
while(!done) {
FD_ZERO(&read_flags);
FD_ZERO(&write_flags);
FD_SET(comm_fd1, &read_flags);
FD_SET(comm_fd2, &read_flags);
FD_SET(STDIN_FILENO, &read_flags);
FD_SET(comm_fd1, &write_flags);
FD_SET(comm_fd2, &write_flags);
FD_SET(STDIN_FILENO, &write_flags);
//call select
sel = select(comm_fd1+comm_fd2+1, &read_flags, &write_flags, (fd_set*)0, &waitd);
및 클라이언트 측에서 다른 변수와 동일합니다. 나는 튜토리얼 온라인에서이 기본 기술을 얻었고 그냥 따라 갔다. 그런 다음 그것은 나를 때렸습니다 - 왜 내가 루프를 할 때마다 파일 디스크립터를 추가하고 파일 디스크립터를 추가합니까? 그들은 이미 추가 된 경우, 왜 그들을 취소하고 다시 추가? 그래서 나는 한동안이 일을 한 번만 해봤고 코드는 더 이상 똑같이 작동하지 않습니다. 왜 누군가가 설명 할 수 있습니까? select가 세트의 내용을 수정했기 때문입니까? 도움이나 통찰력이 있으면 감사하겠습니다.
또한 루프 할 때마다 timeval 구조체 (예 : waitd)를 재설정해야한다는 점에 유의하십시오. –