sock에서 데이터 전송할때 궁금증입니다.
글쓴이: ch0nn0m / 작성시간: 수, 2009/07/15 - 6:24오후
2가지 궁금한게 있는데요...
1) 소켓을 생성하여 데이터를 전송하게 될때...
recv(),send() 함수등을 이용하잖아요
int recv(int sockfd, void *buf, size_t len, int flags);
여기서 len..즉 한번에 수신할수 있는 최대 데이터 크기가 있잖아요...
예를 들어...1024라고 넣었다면...
나중에 용량이 큰 10MB정도를 전송받게 될경우는...
컴퓨터에서 알아서 recv를 나눠서 호출하며 받는건가요??
2) 어디서 본기억으로는 1024라고 하더라도 꼭 그렇게 받는다는것은 아닌거 같은데..
그러면 여기서 굳이 최대 데이터 크기를 써야 하는이유가 뭔가요??
Forums:
질문하신 분께서
질문하신 분께서 조금만 더 언어적인 부분을 공부하셨으면 이런 질문이 없었을텐데라는 생각으로 답변을 달까 말까 한참 고민을 했습니다.
일단, recv( sockfd, buf, len, flags) 에서 볼때, buf가 받을 내용이 저장되어질 공간을 가르키고 있는 포인터죠?
그런데, 이 포인터가 가르키고 있는것은 할당되어 있을 메모리공간의 첫번째(시작) 주소 입니다. 끝을 알수없죠?
그래서, len으로 할당되어(확보되어) 있는 사이즈(즉, 최대 할당된 버퍼의 최대 크기가 되겠습니다)를 알려줘야 그 사이즈만큼을
넘는 데이터를 읽었다고 치더라도 경계를 넘어서 쓰지 않을 수 있겠죠? 즉, BOF(Buffer overflow)를 방지하기 위해서 입니다.
時日也放聲大哭
時日也放聲大哭
댓글 달기