select 에서 write 시점을 감시하는 경우...

kicom95의 이미지

write 시점이....

언제이지요 ?

read 시점은 상대편에서 데이터를 받는 경우인데.....

write 시점은 ?

서버에서 상대방이 접속을 요청한 경우도 이에 해당하는거 같기는데 한데.... 실제로 accept 를 감시하는 경우 readset 에서

감시를 하는데...

그럼 writeset 이 감시되어 사용되는 시점은 언제인지요 ?

궁금하네요.

익명 사용자의 이미지

* 만일, writeset을 select()에 적용할 경우라면
현재 감시되고 있는 파일디스크립터(file descriptor)에 1바이트 이상
쓰기가 가능하면(1바이트 이상의 쓰기버퍼가 비워짐) 발생합니다.
- 만일, 감시 대상이 표준출력(console)이라면, 항시 발생하겠지요?
- 만일, 감시 대상이 디스크파일이라면, 대체로 항시 가능하겠지요?
- 만일, 감시 대상이 소켓이라면, 커널내의 송신버퍼가 1바이트라도 비워진다면, 발생하겠지요.
- 소켓에 이를 적용한다면, write() 호출을 위해 block되지 않아야 하는 경우와 , 심지어 nonblocking 모드로 코딩되었을데, 쓸데없이 write()를 시도해보는 것을 줄이는 테크닉정도로 사용되리라 봅니다.

* 송신버퍼크기는 어떻게 알아내징 ? getsockopt()에 SO_SNDBUF 파라메터를 적절히 세팅하여 크기 알아낼 수 있슴

* 좋은 프로그램 많이 만드세요.

익명 사용자의 이미지

위에 이어서, 당근으로 setsockopt() +SO_SNDBUF를 잘~ 하면, 커널내의
송신버퍼크기를 변경가능합니다. 물론 최대값은 정해져있지요.
음..... SO_RCVBUF !!

kicom95의 이미지

찾아 보니

비동기 모드에서 서버로 접속을 하면

접속이 되는 경우가 2가지가 발생하네요

1) connect 후 return 값이 -1 이 아닌경우

2) connect 후 리턴값이 -1 이지만

Errno == EINPROGRESS 인 경우

2번의 경우 select 에서 write set 에서 감시가 가능.

하다구 합니다.

가자 해외로 ~ .. 돈 벌러.

ssehoony의 이미지

Anonymous wrote:
- 만일, 감시 대상이 소켓이라면, 커널내의 송신버퍼가 1바이트라도 비워진다면, 발생하겠지요.

대부분의 OS 는 어떻게 작동하는지 모르겠지만, 솔라리스의 경우에는 틀립니다.

솔라리스의 경우 lowat 라는 소켓 옵션 값이 있는데, 그 값에 따라 달라집니다.
송신버퍼가 1바이트라도 가능할때 마다 select 가 반응하면 프로그램 효율이 떨어지기 때문에 좀 더 큰 사이즈 일때 반응합니다.

Quote:
transmit low watermark *_xmit_lowat

The amount of free space to be available in the send buffer to have select and poll report the socket writable. The socket option SO_SNDLOWAT allows a dynamic change of this size on a per-socket basis.

http://www.sean.de/Solaris/soltune.html

댓글 달기

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