non-block tcp 소켓으로 send 를 했을 때 network bandwitdh 로 인해 송신이 지연되어 아직 송진되지 않고 소켓 send 버퍼에 남아있는 자료가 몇 byte 인지 알 수 있는 방법 있나요?
플랫폼은 solaris 2.8 입니다. 솔라리스가 아닌 다른 플랫폼에서의 방법이어도 괜찮습니다. 다른 플랫폼에서의 방법이라도 있다면 그 방법을 참고해서 자료를 찾아 볼 있으니깐요.
non-blocking 이라면 현재 send buffer로 보낸 양과 아직 보내지 못한 양을 프로그래머가 이미 알고 있을텐데요. write()의 리턴값으로 (또는 send())말입니다.
non block 일때 write 함수에서 리턴되는 값은, 상대측에 보내고 남은(보내지 못한) 바이트라고 보통 편의상 말하지만, 정확하게는 socket의 send 버퍼에 최대한 담고, 더이상 담지 못한 나머지 부분입니다. (send 버퍼에 있는건 kernel 이 background 로 알아서 송신해 줍니다.)
non block 일때 write 함수에서 리턴되는 값은, 상대측에 보내고 남은(보내지 못한) 바이트라고 보통 편의상 말하지만, 정확하게는 socket의 send 버퍼에 최대한 담고, 더이상 담지 못한 나머지 부분입니다.
위의 말이 맞나요? write의 리턴값은 send 버퍼에 넣은 바이트 수 아니던가요?
devilhero wrote:non block 일때 write 함수에서 리턴되는 값은, 상대측에 보내고 남은(보내지 못한) 바이트라고 보통 편의상 말하지만, 정확하게는 socket의 send 버퍼에 최대한 담고, 더이상 담지 못한 나머지 부분입니다. 위의 말이 맞나요? write의 리턴값은 send 버퍼에 넣은 바이트 수 아니던가요?
네 제가 잘못 답했네요. send 버퍼에 넣고 남은 바이트라니... 죄송. 다른 분 말씀 처럼 send buf 에 넣은 사이즈 입니다.
보내려고 한 사이즈 - 리턴값 = 현재 커널 센드 버퍼에 있으리라고 예측되는 바이트수 뭐 이런 계산이 대충되겠군요.
잘 못된 계산 방법 같네요.
텍스트 포맷에 대한 자세한 정보
<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]
non-blocking 이라면 현재 send buffer로 보낸 양과 아
non-blocking 이라면 현재 send buffer로 보낸 양과 아직 보내지 못한 양을
프로그래머가 이미 알고 있을텐데요.
write()의 리턴값으로 (또는 send())말입니다.
non block 일때 write 함수에서 리턴되는 값은, 상대측에 보내
non block 일때 write 함수에서 리턴되는 값은, 상대측에 보내고 남은(보내지 못한) 바이트라고 보통 편의상 말하지만, 정확하게는 socket의 send 버퍼에 최대한 담고, 더이상 담지 못한 나머지 부분입니다. (send 버퍼에 있는건 kernel 이 background 로 알아서 송신해 줍니다.)
[quote="devilhero"]non block 일때 write 함수
위의 말이 맞나요? write의 리턴값은 send 버퍼에 넣은 바이트 수 아니던가요?
[quote="marten"][quote="devilhero"]non b
kernel send buffer에 넣은 바이트 수입니다.
따라서, 보내려고 한 사이즈 - 리턴값 = 현재 커널 센드 버퍼에 있으리라고 예측되는 바이트수
뭐 이런 계산이 대충되겠군요.
네 제가 잘못 답했네요.send 버퍼에 넣고 남은 바이트라니... 죄
네 제가 잘못 답했네요.
send 버퍼에 넣고 남은 바이트라니... 죄송.
다른 분 말씀 처럼 send buf 에 넣은 사이즈 입니다.
잘 못된 계산 방법 같네요.
댓글 달기