논 블로킹 io에 관한 질문입니다.

jongoon의 이미지

서버/클라이언트 형식의 프로그램을 만들고있는데 tcp를 이용해 통신을 하고

서버에서 논브로킹으로 클라이언트에 보낼경우 클라이언트에서 이를 제때에 처리를

못하고 쌓이면 보내는 쪽에서 오버플로우가 생길텐데 실제로 어떻게 처리되는지

아시는 분 계시나요?

불량청년의 이미지

Quote:
클라이언트에 보낼경우 클라이언트에서 이를 제때에 처리를

못하고 쌓이면 보내는 쪽에서 오버플로우가 생길텐데

그런일은 안생깁니다. *^^*

클라이언트에서 수신받지 못할 정도의 데이터를 보낼 수 없기 때문입니다.

클라이언트는 항상 자기가 받을 만큼의 버퍼공간의 정보를 서버에 보내주어

서버가 데이터를 보낼 때, 그만큼만 보낼 수 있도록 합니다.

윈도우 싸이즈가 여기서 사용되는 것입니다. 또한 만약 님이 생각하시는

것처럼 크라이언트에서 아무것도 못 처리 할 정도면 프로세스는 sleep상태로

되고 데이터가 다 처리될 때까지 기다리게 됩니다. 물론 서버의 디자인이 어떻

게 되어 있느냐에 따라 다르겠지만요.

답변이 됐는지 모르겠네요.

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

FruitsCandy의 이미지

클라이언트에서 버퍼가 꽉차 있다거나 현재 데이타를 받을 상황이 아니면

tcp/ip 전송계층에서 버퍼를 비울때까지 기다렸다가 보내줍니다.

전송계층에서 서버와 클라이언트 사이에서 패킷이 왔다갔다 하면서 데이터를

받을 수 있는지 없는지 알아서 체크합니다. 클라이언트에서 서버쪽으로

데이터를 보낼 경우도 마찬가지 입니다.

따라서 클라이언트의 버퍼가 오버될 경우는 없습니다.

아지랑이류 초환상 공콤 화랑... 포기하다.. T.T