[완료] sendto, recvfrom 호출시 blocking되는 현상

tacore의 이미지

sendto, recvfrom 사용할때

블록킹 되는 현상이 발생해서 검색해보다가 의문점이 있어서 질문 드립니다.

첫번째
sendto는 소켓이 Blocking모드이든 Non-Blocking모드이든 전송할수 있는 최대 크기를 벗어나면 블로킹에 빠지나요?

두번째는
네트웍이이 잘 되다가 중간에 네트웍이 끊긴 상태에서 sendto 호출을 할 경우에 블로킹 상태에 빠질수 있나요?

부분만 보고 이해하려니 힘드네요

위 두가지 경우를 확인하려면 어느 부분의 이해가 더 필요한가요??

molla의 이미지

non blocking mode 에서는 blocking 되지 않고 빠져 나옵니다.

blocking mode 에서 blocking 되는 조건(?)은 write buffer가 다 찼는데 send하려는 경우입니다. send 하려는 내용이 write buffer보다 크거나, 이전에 send 한 내용으로 write buffer가 여유가 없는데 send 하려거나 이럴 때 write buffer에 send 하려는 내용을 다 쓸 수 있을 때 까지 blocking 됩니다.

따라서 두번째 질문하신 것처럼 중간에 네트웍이 끊길 때에도 write buffer가 비워지지 않게 되기 때문에 send하면 blocking 될 수 있습니다.

tacore의 이미지

답변 주신것 보고 차근히 살펴보니

문제는 sendto, recvfrom에 있는것이 아니고 다른곳에 있었습니다.

검색을 해보니 blocking에 빠질수 밖에 없는 함수들도 있더라구요

해결은 잘 되었는데.. 좀더 공부해야 겠어요..

저도 언젠가 이곳에 답변을 +,.+

큰 도움이 되었습니다~ 감사합니다^^