select() 는 버퍼에 읽을 데이터가 있거나 소켓이 끊어지거나 connect 요청이 있을 때 리턴합니다..
제가 궁금한 것은 버퍼에 읽을 데이터가 있을 때 정확히 어떻게 동작하는 지 입니다.
select()를 이용한 가장 쉬운 구조를 생각하면....
while()
{
select();
if (FD_ISSET(listenfd, &rset))
accept();
else
recv();
}
의 구조가 될 것입니다.
하지만 큰 사이즈의 데이터를 받아야 하는 경우라면,,,
recv()에서 시간이 많이 필요할 것이고 그러면 다시 select()가 호출 될 때까지 지연이 되게됩니다.