Clolent

TCP 서버에서 기본적인 함수의 호출 순서

socket             소켓 생성

bind               소켓 주소 할당

listen              연결 요청 대기상태

accept            연결 허용

read / write      데이터 송수신

close               연결종료


연결요청 대기 상태로 진입

int listen( int sock, int backlog ) 

성공시 0 실패시 -1 반환


sock : 연결 요청 대기상태에 두고자 하는 소켓의 파일 디스크립터 전달

이 함수의 인자로 전달된 디스크립터의 소켓이 서버 소켓(리스닝 소켓)이 된다.


backlog : 연결 요청 대기 큐(Queue) 의 크기 정보전달, 5가 전달될시 큐의 크기가
             5가되어 클라이언트의 연결요청을 5 개 까지 대기시킬수 있다.


연결요청 대기상태 라는 것은 클라이언트가 연결 요청을 했을때 연결이 수락될때까지 연결 요청 자체를 대기시킬수 있다는 뜻이다.


Q : 저기요 저 연결좀 지금 하려고하는데요

A : 아 그러시군요 일단 여기서서 대기하세요 앞사람 끝나면 연결시켜드릴게요.


이 상태라는 뜻이다.

연결요청 대기 큐의 크기는 언제까지나 실험적 결과에 의존하여 결정되게 된다. 


클라이언트의 연결요청 수락

listen 함수 호출 이후 클라이언트의 연결요청이 들어 왔다면, 들어온 순서대로 수락한다.


연결요청을 수락 = 데이터를 주고 받을 수 있는 상태 !


그럼 뭐가 필요한가? 물론 소켓이다.

그런데 만들어 놨던 서버 소켓은 문지기 역할을 하고있으니

클라이언트와의 데이터 송수신을 위해선 소켓이 하나 더 필요한 법이다.

하지만 직접 만들필요는 없다. 다음 함수의 호출로 자동으로 만들고 연결이 된다.


int accept ( int sock, struct sockaddr *addr , socklen_t *addrlen ) ;


성공시 소켓의 파일 디스크립터, 실패시 -1 반환


sock : 서버 소켓이 파일 디스크립터 전달

addr : 연결요청 한 클라이언트의 주소정보를 담을 변수의 주소값 전달, 함수 호출이 완료되면 인자로 전달된 주소의 변수에는 클라이언트의 주소 정보가 채워진다.

addrlen : addr 에 전달된 주소의 변수크기를 바이트 단위로 전달.


결과적으로 말하자면 accept 함수는 ' 연결요청 대기 큐' 에서 대기중인 클라이언트의 연결요청을 수락해주는 함수이다.


호출성공시 내부적으로 데이터 입출력용 소켓을 생성하고 해당 소켓의 파일
디스크립터를 반환해준다.
중요한 것은 이 소켓은 자동으로 생성되어 연결요청한 클라이언트 소켓과 연결까지 해준다는 것이다.


TCP 클라이언트에서 기본적인 함수의 호출 순서

socket             소켓 생성

connect           연결 요청

read / write      데이터 송수신

close               연결종료

짧다


클라이언트의 연결요청

int connect ( int sock, struct sockaddr *servaddr, socklen_t addrlen ) ;

성공 시 0 , 실패 시 -1 반환 

sock :  클라이언트 소켓의 파일 디스크립터 전달

servaddr :  연결요청 할 서버의 주소정보를 담은 변수의 주소 값 전달

addrlen  :  servaddr에 전달된 주소의 변수 크기를 바이트 단위로 전달


클라이언트가 connect 함수를 호출하면 다음준 두가지 중 한가지 상황이 되어야 함수가 반환된다. ( 함수 호출이 완료된다 )

- 서버에 의해 연결요청이 접수되었다.

- 네트워크 단절 등 오류상황으로인해 연결요청이 중단되었다.


자 여기서 잘 보자 connect = accept 가 아니다 ! 

고백한다고 무조건 받아지는게 아닌것처럼


이제그저 번호표를 뽑았을 뿐이다.


TCP 기반 서버, 클라이언트 함수 호출 관계


Q : 서버는 은행창구 클라이언트는 이용 고객 이군요

A : 그렇게 이해해도 문제가 없을듯 합니다.

Q : 번호표 뽑는게 Connect 받아주는건 Accept 구요

A : 그렇죠

Q : Connect 했다고 무조건 연결이 되는건 아니었네요

A : 고백했다고 무조건 사귀던가요 

Q : .....






댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글