socket 통신 시 recvfrom/recv 의 blocking을 해제하고 싶은데 어떻게 해야하나요?

munhoney의 이미지

안녕하세요

socket 통신을 하고 있는데, recvfrom으로 인해 blocking되어 있는 와중에 blocking을 해제하고 싶습니다.

close를 해도 block이 풀리지는 않는군요.
fcntl을 사용해서 O_NONBLOCKING을 해주었는데도, blocking 도중에는 해제가 안됩니다.
혹 방법이 있을까요?

munhoney의 이미지

전에 누군가가 이미 답변을 알려주셨었네요.. (좀더 찾아봤어야 했는데.. 헐.. 지송)

방법은

close 하기 전에

shutdown(sock,SHUT_RDWR/*winsock에서는 SD_BOTH*/);

하면 된답니다.

실제 해보니 정상동작하네요.

그런데 왜 shutdown을 해야 하지요? shutdown은 단지 선택적으로 OFF시키는 걸로만 알고 있었는데,...
그냥 트릭으로 봐야하나요?

---------------------------------
http://blog.naver.com/munhoney
---------------------------------