URL : http://christin2.tistory.com/31
.....
.....
연결요청 대기상태로의 진입
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/listen
- sock : 연결요청 대기상태에 두고자 하는 소켓의 파일 디스크립터 전달, 이 함수의 인자로 전달된 디스크립터의 소켓이 서버소켓이 됨
- backlog : 연결요청 대기 큐의 크기정보 전달
- listen 함수가 호출되어야 클라이언트가 연결요청을 할 수 있는 상태가 됨
- 클라이언트의 연결요청도 인터넷을 통해서 흘러 들어오는 일종의 데이터 전송이므로 받아들이기 위한 소켓이 하나 필요하고 서버소켓이 그 역할을 함
- 여러 개의 클라이언트가 연결 요청을 했을 때, 연결요청 대기 큐에서 대기
클라이언트의 연결요청 수락
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/accept
- sock : 서버 소켓의 파일 디스크립터 전달
- addr : 연결요청 한 클라이언트의 주소정보를 담을 변수의 주소 값 전달
- addrlen : addr에 전달된 주소의 변수 크기를 바이트 단위로 전달
- '연결 요청 대기 큐에서 대기중인 클라이언트의 연결 요청을 수락하는 기능의 함수
- 호출 결과로 소켓이 생성되고 연결요청을 한 클라이언트 소켓과 자동 연결
TCP 클라이언트의 기본적인 함수호출 순서
클라이언트의 연결요청
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/connect
- sock : 클라이언트 소켓의 파일 디스크립터 전달
- servaddr : 연결요청 한 클라이언트의 주소정보를 담을 변수의 주소 값 전다
- addrlen : servaddr에 전달된 주소의 변수 크기를 바이트 단위로 전달
* 함수가 반환되는 경우
- 서버에 의해 연결요청이 접수됨
- 네트워크 단절 등 오류상황이 발생해서 연결요청이 중단
* 연결요청의 접수 : 클라이언트의 연결요청 정보가 서버의 연결요청 대기 큐에 등록된 상황을 의미
TCP기반, 서버/클라이언트의 함수 호출 관계
- 클라이언트가 connect 함수를 호출 할 때까지 서버는 accept 함수가 호출된 위치에서 블로킹 상태에 놓임
* 에코서버 : 클라이언트가 저송하는 문자열 데이터를 그대로 재전송하는 서버
Iterative 서버 함수호출 순서
- 계속해서 들어오는 클라이언트의 연결요청을 수락하기 위해서 반복문을 삽입하여 accept함수를 반복 호출
- 서버는 한 순간에 하나의 클라이언트와 연결되어 에코 서비스를 제공
Iterative 에코 클라이언트 문제점
- 둘 이상의 write함수 호출로 전달된 문자열 정보가 묶여서 한번에 서버로 전송 가능
- 클라이언트는 한번에 둘 이상의 문자열 정보를 서버로부터 되돌려 받아서 원하는 결과를 얻지 못 할 수 있음
- 데이터의 모든 조각이 클라이언트에게 전송되지 않았음에도 클라이언트는 read함수를 호출 할 수도 있음
윈도우 기반 에코 서버
- WSAStartup, WSACleanup 함수호출을 통한 소켓 라이브러리의 초기화와 해제
- 자료형과 변수의 이름을 윈도우 스타일로 변경하기
- 데이터 송수신을 위해 read, write 함수 대신 recv, send 함수 호출하기
- 소켓의 종료를 위해서 close 대신 closesocket함수 호출하기
'Programming > Linux C/C++' 카테고리의 다른 글
네트워크 프로그래밍과 소켓의 이해 (0) | 2014.09.02 |
---|---|
소켓의 타입과 프로토콜의 설정 (0) | 2014.09.01 |
주소체계와 데이터 정렬 (2) | 2014.08.29 |
linux socket summary (0) | 2014.06.15 |
리눅스 커널 내부 구조@kandroid (0) | 2014.06.03 |