select()를 통해서 데이타 도착 수신을 검출하고, FD_ISSET()을 통해서 해당 fd를 찾아서, recv()를 통해서 데이타를 읽고 있습니다.
그런데 recv()로 읽고 있는 중에, 동일 fd로 데이타가 또 도착을 했고, recv()에서는 새로 도착한 데이타를 읽지 않고 select()로 들어갔다면.. select()는 정상적으로 해당 fd의 데이타 도착을 알려 줄 수 있을까요 ?
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. ***************************************/
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Readable Writable
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.
***************************************/
댓글 달기