socket close

하하의 이미지

내가 active close를 했을때..

즉 .. 먼저 close를 호출해서.. 연결된 상대한테 FIN을 보냈을때..

TCP 상태 천이도를.. 보면.. Active Close 상태에서

FIN을 보낸다음.. ack 던, FIN 이던 받아야 Active Close 가 완료(?)

되는 걸로 그려져 있습니다.

그런데 이때.. 연결된 상대가.. 랜선이 뽑혀서.. 내가 보낸 FIN 에 대한.

걸 받을수도.. 그것에 대한 응답을 할수 도 없는 상황이라 했을때..

상태 천이도에도.. 그것에 대한 방안은 없어 보임니다..

또한.. Active Close를 시도한 나의.. 연결 상태도.. 어떠한 응답도

못받은 상황이므로.. 연결상태 입니다......

이러한 상황일때.. 과연 저는. 어떻게 하면.. 소켓을 완전히 끊을수 있을까요?

소켓 옵션에 보면.. KEEPALIVE 가 있는데.. 이건.. 꾀 오랜 시간(3시간 정도)

흘러야 끊기는걸로 알고 있습니다.

또한 SO_LINGER 같은 경우.. 응용단에서.. close 함수가 리턴은 되겠지만..

실제.. 상대와는 연결 상태로 되있습니다...........

어떻게 생각하시나요?

TCP의 헛점일까요? 아님 제가 멀 크게 잘못생각하고 있는 걸까요?

pynoos의 이미지

close가 block 되어서 안넘어오는 상황이 발생하는 것이죠?

정확한 해결책이 될 수 있을지는 모르겠습니다만,
1. alarm으로 깨어나도록하는 방법
2. close하기 전에 nonblock으로 바꾸고 select를 통해 timeout 내에서만 기다리도록하는 방법

이렇게 해보시면 어떨까요? 1 번의 경우 thread program이라면 좀 쓰기 귀찮을 것이고, 2 번이라면, 단순한것에 너무 복잡하게 대응하는 것 같아서 그렇기는 하지만.. 우아하게 종료하려면.. 해봄직합니다.

익명 사용자의 이미지

아.... 아뇨..

close 블럭은.. LINGER 옵션을 주면 블럭 현상은

피할 수 있었습니다.

헌데.. close가 리턴되고서도

netstat -nac | grep port 를 하면..

여전히.. establish 이어서요...

상태가.. LAN 선 이 빠졌다거나 여튼 내가 close를

호출하여 FIN을 보낸 상황에 대해 전혀 응답을 못할때의

경우입니다

pynoos의 이미지

close가 리턴되었을 때, return 값은 어떤것이죠?

그리고, close가 성공적으로 return 되었다면, netstat 에서는 FIN_WAIT 으로 보여야 정상입니다.
계속 ESTABLISHED 상태라면 close를 통한 fin 패킷이 전송되지 않았기 때문입니다.

익명 사용자의 이미지

거참 이상합니다. close 호출씨.

분명 리턴값은 -1 은 아닙니다.

또한..

netstat -nac | grep port

tcp 0 0 218.145.xx.xx:28001 203.236.xx.xx:61213 ESTABLISHED

계속 연결된 상태로 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.