예를들어 recv에서 받아올 패킷길이를 500으로 두고실제로 버퍼에 있는게 100이라면 버퍼가 500까지 찰때까지 블록돼있는줄 알았는데방금 시험해보니 바로 리턴되더라;;; 원래 이게 맞는건가??
어 블러킹 소켓도 recv 가 리턴하는 수신 데이터 크기를 꼭 체크 해야 해,
문말인지 모르겟당... recv에서 받아올 데이터 길이를 500을 넣었는데 버퍼에 100밖에 없으면 100만 가져오고 리텅하는거야??
블로킹이 수신 받을 데이터가 오기 전까지 대기 상태로 유지하는게 블로킹 아니였냐? 내가 잘못 알고있나..? 저 버퍼가 커널 버퍼 말하는건가?
아니 소켓 버퍼 맞음. 내가 잘못알고있었나봐 버퍼가 비어있지 않으면 무조건 값을 받아오고 리턴하는거지?
설정한만큼 받아오지
블러킹 맞으니깐 책 다시 봐봐
직접 소스 돌려봤는데 그냥 버퍼에 있는만큼만 받아오던데?
그러니까 내말은 설한 바이트 길이만큼만 받아오지만 그 바이트 길이만큼이 버퍼에 없을경우애는 일단 버퍼에 있는 데이터만 가져오고 그 길이만큼 리턴하는거 ㅇㅇ
설한 -> 설정한
물론 설정한 바이트 길아보다 버퍼에 있는 데이터가 더 많으면 설정한 길이만큼만 받아오지
https://kldp.org/node/20254
여기 보고 해결했음. 가져오고 싶은 데이터 길이를 파라미터로 넘겨줬는데, 실제로 recv버퍼에 있는 데이터가 적으면 일단 있는만큼만 다 가져오고 리턴해주는거네. 난 데이터가 쌓일때까지 블록되는줄 알았음ㅋ