shutdown과 close는 어떻게 다른가요? close는 보내진 데이터가있으면 close하더라도 모든 데이터를 수신한후 닫고, shutdown은 즉시 (보내진 데이터가 무시되고) 닫히나요? 이것이 맞는지요?
일단 close는 보내거나 받는 데이터가 있더라도 바로 닫습니다.
shutdown은 두번째 옵션에 따라 다릅니다.
SHUT_RD SHUT_WR SHUT_RDWR
확실히 맞는지는 기억에 안나지만 옵션이 위의 3가지입니다.
shutdown시에 SHUT_RDWR를 넣으면 close와 똑같이 작동할겁니다.
차이가 나는 부분이 있습니다. close()의 경우에는 파일 닫는 것과 동일합니다. 동일한 디스크립터를 여러개가 가지고 있는 경우에 (fork한 경우처럼요), 한쪽에서 close를 한다고 해서 해당 소켓이 끊어지지 않습니다. 링크 카운터 비슷한 것을 가지고 있어서 close()될 때마다 하나씩 줄여가다가 0이 되면 그때서야 소켓을 끊게되겠져.
shutdown()의 경우에는 그런 것에 상관없이 무조건 소켓을 통해 읽기나 쓰기를 못하게 합니다.
읽기, 쓰기를 선택적으로 할 수 있다는 차이도 있겠고요,
또, shutdown은 close와는 달리 소켓과 할당된 자원을 해제하지 않습니다.
텍스트 포맷에 대한 자세한 정보
<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]
Re: 소켓에서 shutdown 과 close의 차이는?
일단 close는 보내거나 받는 데이터가 있더라도 바로 닫습니다.
shutdown은 두번째 옵션에 따라 다릅니다.
SHUT_RD
SHUT_WR
SHUT_RDWR
확실히 맞는지는 기억에 안나지만 옵션이 위의 3가지입니다.
shutdown시에 SHUT_RDWR를 넣으면 close와 똑같이 작동할겁니다.
Re: 소켓에서 shutdown 과 close의 차이는?
차이가 나는 부분이 있습니다.
close()의 경우에는 파일 닫는 것과 동일합니다.
동일한 디스크립터를 여러개가 가지고 있는 경우에
(fork한 경우처럼요), 한쪽에서 close를 한다고 해서
해당 소켓이 끊어지지 않습니다. 링크 카운터 비슷한 것을
가지고 있어서 close()될 때마다 하나씩 줄여가다가 0이 되면
그때서야 소켓을 끊게되겠져.
shutdown()의 경우에는 그런 것에 상관없이 무조건 소켓을
통해 읽기나 쓰기를 못하게 합니다.
읽기, 쓰기를 선택적으로 할 수 있다는 차이도 있겠고요,
또, shutdown은 close와는 달리 소켓과 할당된 자원을 해제하지 않습니다.
댓글 달기