소켓프로그래밍 accpet함수 마지막인자(3번째인자)의 주소값으로 넘겨주는 이유가 궁금합니다.

gohy의 이미지

accpet(int serv_sock,struct sockaddr* addr, socklen_t* addrlen) 함수의 형태에서 3번째(마지막 인자)로 addrlen의 주소값을 넘겨주는 이유가 궁금합니다.

(현재 윤성우님의 TCP/IP 프로토콜을 보며 공부중입니다.)
보통 예제에서는
---------------------------------------------------------------------------
clnt_addr_size = sizeof(clnt_addr)
clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size)
---------------------------------------------------------------------------

이런식으로 서버측에서 accept함수를 호출하던데 clnt_addr_size가 어차피 accept()함수 내부에서 갱신되기에 주소값을 넘겨주는 형태인것 같은데 그 이전에
clnt_addr_size = sizeof(clnt_addr) 문장이 필요한지 ;;;;

빠른답변 부탁드립니다ㅜ

twinwings의 이미지

질문하기 전에 MAN 페이지부터 찾아보세요.

NAME

accept - accept a connection on a socket
SYNOPSIS

#include <sys/types.h>
#include <sys/socket.h> 
 
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

DESCRIPTION

... 생략 ...

The addrlen argument is a value-result argument: it should initially contain the size of the structure pointed to by addr; on return it will contain the actual length (in bytes) of the address returned. When addr is NULL nothing is filled in.

... 생략 ...

twinwings의 이미지

중복글이었네요. 괜히 달았네..