리시브를 받다가 상대방이 리시브를 누르면 도중에 리시브 받을 데이타가 없기때문에 블록상태에 빠지겠지요..
이걸 방지하기위해 어떤 해결방법이있나요?
논블록 모드로 돌리면 해결이 가능한지요..
네트웍 소켓이라면 받은 일부만이 리턴됩니다. 따라서 recv()는 신경쓸 필요가 없습니다.
블락되는 경우는 connect()시에 자주 발생하는데(중간에 방화벽 등등 거시기한거 있는 경우) 이런경우 무한블록을 피하기 위해서 SIGALRM을 자주 이용하죠.
궁금하시면 man alarm
시스템콜이 블락된 상태에서 시그널이 떨어지게 되면 탈출하는데 이때-1이 반환되고 errno에는 EINTR이 들어가 있습니다.
Written By the Black Knight of Destruction
텍스트 포맷에 대한 자세한 정보
<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]
네트웍 소켓이라면 받은 일부만이 리턴됩니다. 따라서 recv()는 신경쓸
네트웍 소켓이라면 받은 일부만이 리턴됩니다. 따라서 recv()는 신경쓸 필요가 없습니다.
블락되는 경우는 connect()시에 자주 발생하는데(중간에 방화벽 등등 거시기한거 있는 경우)
이런경우 무한블록을 피하기 위해서 SIGALRM을 자주 이용하죠.
궁금하시면 man alarm
시스템콜이 블락된 상태에서 시그널이 떨어지게 되면 탈출하는데
이때-1이 반환되고 errno에는 EINTR이 들어가 있습니다.
Written By the Black Knight of Destruction
댓글 달기