반응형

echo 클라이언트 수정된 코드

 

 

앞서 배운 echo 클라이언트의 문제점은

 

초보 프로그래머들도 흔히 실수하는 것 중 하나이다.

 

그런데 

 

우리가 배웠던 echo 클라이언트의 경우에는 해결이 쉽다.

 

클라이언트가 수신해야 할 데이터의 크기를 미리 알고 있기 때문이다.

 

예를 들어서 크기가 100byte인 문자열을 전송했다면

 

다시 100byte가 수신될 때까지 반복해서 read 함수를 호출하면 된다.

 

-

 

echo_client2.c
0.00MB

 

 

 

-

 

위 코드 중 44 ~ 54 행까지가 변경 및 추가된 부분이다.

 

이전 코드에서는 단순히 read 함수를 한번 호출하고 말았던 것을

 

위 코드에서는 전송한 데이터의 크기만큼 데이터를 수신하기 위해서 

 

read 함수를 반복 호출하고 있다.

 

따라서 정확히 전송한 바이트 크기만큼 데이터를 수신할 수 있게 되었다.

 

그리고 

 

위 코드 중 47 행의 반복문은 다음과 같이 조건을 줘도 된다.

 

-

 

 

-

 

보낸 만큼 받아야 하므로 

 

recv_len에 저장된 값과 str_len에 저장된 값이 일치하는 시점 while문을 빠져나가는 시점이다.

 

그래서 위 반복문의 조건이 더 논리적이라는 생각이 들 수 있지만

 

위 반복문의 조건은 무한루프에 빠질 수 있는 조건이다.

 

혹시라도 오류가 발생해서 데이터를 읽는 과정에서 recv_len에 저장된 값이 

 

str_len을 초과하는 상황이 발생한다고 가정하면

 

프로그램은 while문을 빠져나오지 못한다.

 

하지만 while문의 조건을 다음과 같이 주면 오류가 발생해도 무한루프에 빠지지 않는다.

 

-

 

 

반응형

+ Recent posts