서버/클라이언트 형식의 프로그램을 만들고있는데 tcp를 이용해 통신을 하고
서버에서 논브로킹으로 클라이언트에 보낼경우 클라이언트에서 이를 제때에 처리를
못하고 쌓이면 보내는 쪽에서 오버플로우가 생길텐데 실제로 어떻게 처리되는지
아시는 분 계시나요?
클라이언트에 보낼경우 클라이언트에서 이를 제때에 처리를 못하고 쌓이면 보내는 쪽에서 오버플로우가 생길텐데
못하고 쌓이면 보내는 쪽에서 오버플로우가 생길텐데
그런일은 안생깁니다. *^^*
클라이언트에서 수신받지 못할 정도의 데이터를 보낼 수 없기 때문입니다.
클라이언트는 항상 자기가 받을 만큼의 버퍼공간의 정보를 서버에 보내주어
서버가 데이터를 보낼 때, 그만큼만 보낼 수 있도록 합니다.
윈도우 싸이즈가 여기서 사용되는 것입니다. 또한 만약 님이 생각하시는
것처럼 크라이언트에서 아무것도 못 처리 할 정도면 프로세스는 sleep상태로
되고 데이터가 다 처리될 때까지 기다리게 됩니다. 물론 서버의 디자인이 어떻
게 되어 있느냐에 따라 다르겠지만요.
답변이 됐는지 모르겠네요.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
클라이언트에서 버퍼가 꽉차 있다거나 현재 데이타를 받을 상황이 아니면
tcp/ip 전송계층에서 버퍼를 비울때까지 기다렸다가 보내줍니다.
전송계층에서 서버와 클라이언트 사이에서 패킷이 왔다갔다 하면서 데이터를
받을 수 있는지 없는지 알아서 체크합니다. 클라이언트에서 서버쪽으로
데이터를 보낼 경우도 마찬가지 입니다.
따라서 클라이언트의 버퍼가 오버될 경우는 없습니다.
아지랑이류 초환상 공콤 화랑... 포기하다.. T.T
텍스트 포맷에 대한 자세한 정보
<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]
음...
그런일은 안생깁니다. *^^*
클라이언트에서 수신받지 못할 정도의 데이터를 보낼 수 없기 때문입니다.
클라이언트는 항상 자기가 받을 만큼의 버퍼공간의 정보를 서버에 보내주어
서버가 데이터를 보낼 때, 그만큼만 보낼 수 있도록 합니다.
윈도우 싸이즈가 여기서 사용되는 것입니다. 또한 만약 님이 생각하시는
것처럼 크라이언트에서 아무것도 못 처리 할 정도면 프로세스는 sleep상태로
되고 데이터가 다 처리될 때까지 기다리게 됩니다. 물론 서버의 디자인이 어떻
게 되어 있느냐에 따라 다르겠지만요.
답변이 됐는지 모르겠네요.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
클라이언트에서 버퍼가 꽉차 있다거나 현재 데이타를 받을 상황이 아니면
클라이언트에서 버퍼가 꽉차 있다거나 현재 데이타를 받을 상황이 아니면
tcp/ip 전송계층에서 버퍼를 비울때까지 기다렸다가 보내줍니다.
전송계층에서 서버와 클라이언트 사이에서 패킷이 왔다갔다 하면서 데이터를
받을 수 있는지 없는지 알아서 체크합니다. 클라이언트에서 서버쪽으로
데이터를 보낼 경우도 마찬가지 입니다.
따라서 클라이언트의 버퍼가 오버될 경우는 없습니다.
아지랑이류 초환상 공콤 화랑... 포기하다.. T.T
댓글 달기