recv 로 리시브받을때 상대받이 센드를 중단했을때

hyun1023의 이미지

리시브를 받다가 상대방이 리시브를 누르면 도중에 리시브 받을 데이타가 없기때문에 블록상태에 빠지겠지요..

이걸 방지하기위해 어떤 해결방법이있나요?

논블록 모드로 돌리면 해결이 가능한지요..

Necromancer의 이미지

네트웍 소켓이라면 받은 일부만이 리턴됩니다. 따라서 recv()는 신경쓸 필요가 없습니다.

블락되는 경우는 connect()시에 자주 발생하는데(중간에 방화벽 등등 거시기한거 있는 경우)
이런경우 무한블록을 피하기 위해서 SIGALRM을 자주 이용하죠.

궁금하시면 man alarm

시스템콜이 블락된 상태에서 시그널이 떨어지게 되면 탈출하는데
이때-1이 반환되고 errno에는 EINTR이 들어가 있습니다.

Written By the Black Knight of Destruction