SO_LINGER 옵션에 관한 생각

하하의 이미지

so_linger 옵션은 close의 행동을 결정한다..

예를 들어

so_linger 를 off 했을 때

close 함수는 바로 return 된다.

이말은 소켓 송신 버퍼에 보낼 데이터가 있을지라도 close 함수가

TCP segment 옵션 RST 를 set 하고 return 한다는 의미

만약 보낼 데이터가 없다면 TCP segment 옵션 FIN을 set 하고

return 한다는 의미.

그럼 so_linger 를 on 하고

close 했을때 소켓 송신 버퍼에 보낼 데이터가 아직 남아 있다면

소켓은 블럭 또는 so_linger timeout 동안 블럭. 된다.

이게 so_linger에 제가 알고 있는 바입니다.

그렇데 한가지 의문이 드는게..

해당 소켓에 write를 한다면 write 함수가 return 되는 타임은

소켓 송신 버퍼의 내용이 다 비워질때 즉 서버로 부터 ack 올때

비로소 return 됩니다..

그렇담

so_linger 옵션은 논블럭 소켓에서만 유용하단 생각이 듭니다.

왜냐하면 블럭 소켓일 경우 write 함수 자체가 return 되지 않기

때문에 즉 소켓 송신 버퍼가 비워진 후에야 close 함수가 호출되기

때문에 close 가 so_linger를 set 하던 안하던 상관이 없단 생각이

듭니다.

불량청년의 이미지

Quote:
해당 소켓에 write를 한다면 write 함수가 return 되는 타임은

소켓 송신 버퍼의 내용이 다 비워질때 즉 서버로 부터 ack 올때

비로소 return 됩니다..

확인응답이 와야 write함수가 리턴되는것이 아니라 소켓버퍼에 일단

쓰면 리턴되는거 아닌가요?

님의 말씀이 틀린것은 아니나(ack가 와야 window 싸이즈가 조정되며

소켓 버퍼가 비워지고 데이터가 가겠지만...) 꼭 ack가 와야 리턴되는것은 아니지요.

SO_LINGER 옵션에 대한 내용은 검색하면 많이 나옵니다.

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

B00m의 이미지

위에 분도 언급하셨듯이 write 함수는 패킷을 보내어 ACK 를 받을때 리턴되는것이 아니라 OS 차원의 소켓 처리영역으로 들어가면 리턴하게 되는것입니다.

그리고 write 를 계속 콜한다해도 실제적으로 소켓은 그때마다 데이타를 보내는것이 아니마라 여러데이타를 한번에 합쳐서 보내기도 하고 또 ACK 를 안 받고도 다음 패킷을 계속 보내고 ACK 는 나중에 한꺼번에 받기도 합니다.

즉, wirte 함수가 성공한 시점이 상대편에서 read 가 성공한 시점은 아니라는거죠.

따라서 논블럭이고 블럭이고 그건 어떻게 보면 프로그램적인 처리방식의 문제이지 차이는 없습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.