* 만일, writeset을 select()에 적용할 경우라면
현재 감시되고 있는 파일디스크립터(file descriptor)에 1바이트 이상
쓰기가 가능하면(1바이트 이상의 쓰기버퍼가 비워짐) 발생합니다.
- 만일, 감시 대상이 표준출력(console)이라면, 항시 발생하겠지요?
- 만일, 감시 대상이 디스크파일이라면, 대체로 항시 가능하겠지요?
- 만일, 감시 대상이 소켓이라면, 커널내의 송신버퍼가 1바이트라도 비워진다면, 발생하겠지요.
- 소켓에 이를 적용한다면, write() 호출을 위해 block되지 않아야 하는 경우와 , 심지어 nonblocking 모드로 코딩되었을데, 쓸데없이 write()를 시도해보는 것을 줄이는 테크닉정도로 사용되리라 봅니다.
* 송신버퍼크기는 어떻게 알아내징 ? getsockopt()에 SO_SNDBUF 파라메터를 적절히 세팅하여 크기 알아낼 수 있슴
- 만일, 감시 대상이 소켓이라면, 커널내의 송신버퍼가 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.
* 만일, writeset을 select()에 적용할 경우라면현재 감
* 만일, writeset을 select()에 적용할 경우라면
현재 감시되고 있는 파일디스크립터(file descriptor)에 1바이트 이상
쓰기가 가능하면(1바이트 이상의 쓰기버퍼가 비워짐) 발생합니다.
- 만일, 감시 대상이 표준출력(console)이라면, 항시 발생하겠지요?
- 만일, 감시 대상이 디스크파일이라면, 대체로 항시 가능하겠지요?
- 만일, 감시 대상이 소켓이라면, 커널내의 송신버퍼가 1바이트라도 비워진다면, 발생하겠지요.
- 소켓에 이를 적용한다면, write() 호출을 위해 block되지 않아야 하는 경우와 , 심지어 nonblocking 모드로 코딩되었을데, 쓸데없이 write()를 시도해보는 것을 줄이는 테크닉정도로 사용되리라 봅니다.
* 송신버퍼크기는 어떻게 알아내징 ? getsockopt()에 SO_SNDBUF 파라메터를 적절히 세팅하여 크기 알아낼 수 있슴
* 좋은 프로그램 많이 만드세요.
위에 이어서, 당근으로 setsockopt() +SO_SNDBUF를 잘~
위에 이어서, 당근으로 setsockopt() +SO_SNDBUF를 잘~ 하면, 커널내의
송신버퍼크기를 변경가능합니다. 물론 최대값은 정해져있지요.
음..... SO_RCVBUF !!
찾아 보니 비동기 모드에서 서버로 접속을 하면 접
찾아 보니
비동기 모드에서 서버로 접속을 하면
접속이 되는 경우가 2가지가 발생하네요
1) connect 후 return 값이 -1 이 아닌경우
2) connect 후 리턴값이 -1 이지만
Errno == EINPROGRESS 인 경우
2번의 경우 select 에서 write set 에서 감시가 가능.
하다구 합니다.
가자 해외로 ~ .. 돈 벌러.
[quote="Anonymous"]- 만일, 감시 대상이 소켓이라면, 커
대부분의 OS 는 어떻게 작동하는지 모르겠지만, 솔라리스의 경우에는 틀립니다.
솔라리스의 경우 lowat 라는 소켓 옵션 값이 있는데, 그 값에 따라 달라집니다.
송신버퍼가 1바이트라도 가능할때 마다 select 가 반응하면 프로그램 효율이 떨어지기 때문에 좀 더 큰 사이즈 일때 반응합니다.
댓글 달기