select 관련 질문 드립니다.

arcinf0의 이미지

select()를 통해서 데이타 도착 수신을 검출하고, FD_ISSET()을 통해서 해당 fd를 찾아서, recv()를 통해서 데이타를 읽고 있습니다.

그런데 recv()로 읽고 있는 중에, 동일 fd로 데이타가 또 도착을 했고, recv()에서는 새로 도착한 데이타를 읽지 않고 select()로 들어갔다면..
select()는 정상적으로 해당 fd의 데이타 도착을 알려 줄 수 있을까요 ?

prether의 이미지

select()가 value-result parameter를 통해 내놓는 결과는
Input/Ouput이 발생했는지 여부가 아니라 Readable 하냐?
Writable하냐입니다.

Readable, 즉 읽을 수 있는 상태라는 뜻이고요. 그러므로
도착 후 recv()를 안하고 select()를 불러도
당연히 KERNEL RECEIVE BUFFER에 아직 읽히지 않은 데이터가
존재하므로 FD_ISSET()==1로 나옵니다.

/***************************************
Being the one is just like being in love.
***************************************/