send/recv partial Error 방지하는 법

2019. 7. 23. 00:36드론

send/recv의 반환값은 처리된 바이트 수다. 따라서 partial 에러가 발생할 수 있기 때문에 buf 크기만큼 처리해야 하는 코드가 반드시 필요하다. 아래 코드는 buf의 주소는 늘리면서, 또한 그만큼 보낼 데이터의 양은 줄이면서 parital 에러를 방지하게 된다

 

문제가 발생하는 원인은 TCP는 데이터의 경계가 존재하지 않는다. 따라서 TCP로 구현을 한다면 둘 이상의 패킷 전송으로 데이터 전송을 완료할 수 있다. 따라서 클라이언트 쪽에서 한 번만 read를 한다면 partial error가 발생할 수 있다. 결론적으로는 TCP 전송계층에서 서버는 한 번의 write를 작성할 수 있짐나, 운영체제가 내부적으로 나눠서 전송할 수 있다