1.read의 리턴값은 보통 읽어들인 글자의 개수이고 소켓이 정상적으로 종료되었을 때 0, 당장 읽어들일 데이터가 없을때 -1을 반환한다... 이렇게 이해했는데 제가 이해한게 맞나요?
2.tcp는 데이터의 경계가 없다고 했는게 그렇다면 소켓이 종료되지 않은 상태이고 데이터의 길이가 일정치 않을때 데이터가 모두 전송되었는지 판별하려면 어떻게해야하나요?
리눅스라면 man 2 read 해보시면 리턴값 -1은 에러발생시 리턴되는 값입니다.
물론 errno 값에 따라 실제로 에러가 아닌 경우가 있으니 처리하면 됩니다.
// 이 때 소켓은 Non-blocking이어야 합니다.
ret = read(...);if(ret ==-1){if(errno == EAGAIN){// 당장 읽어들일 데이터가 없을 때. // EAGAIN Non-blocking I/O has been selected using O_NONBLOCK and no data was immediately available for reading.}elseif(errno == EINTR){}else{// ...}}
1번은 맞는것 같고 2번같은경우는 보통 데이터의 앞에
1번은 맞는것 같고 2번같은경우는
보통 데이터의 앞에 그 길이를 명시해주는 방식을 사용합니다. 처음부터 길이를 전부 전달할 수도 있고 일정길이씩 잘라서 길이:데이터 형식으로 전달하기도 하죠
리눅스라면 man 2 read 해보시면 리턴값 -1은
리눅스라면 man 2 read 해보시면 리턴값 -1은 에러발생시 리턴되는 값입니다.
물론 errno 값에 따라 실제로 에러가 아닌 경우가 있으니 처리하면 됩니다.
Signature :) - "여유를 갖고 행동하되 게을러지지 말자"
댓글 달기