일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- binary search
- two pointer
- 다익스트라
- Dijkstra
- String
- union find
- Two Points
- 스토어드 프로시저
- 그래프
- 이진탐색
- SQL
- Brute Force
- DP
- Trie
- Hash
- Stored Procedure
- MYSQL
Archives
- Today
- Total
codingfarm
4. 소켓 네트워크 프로그램 개발 - 5. 연결 대기(accept 함수) 본문
- 수신 대기열의 가장 앞에 있는 연결 요청을 가져온다.
- 연결 요청을 성공적으로 가져오면 클라이언트와의 통신을 위한 연결 소켓을 생성한다.
accept 함수의 원형은 아래와 같다
1
|
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
|
cs |
매개변수
- sockfd : socket 함수 호출시 반환된 소켓 식별 번호
- addr : accept 함수 성공시, 연결된 client의 주소와 포트 정보가 담기는 구조체
- addrlen : sockaddr 구조체의 크기
- 반환값
- 0 이상 : 성공, 소켓 지정 번호
- -1 : 실패
함수자체의 컨셉은 bind 함수와 유사하다.
반환값은 socket 함수로 만든 듣기 소켓과는 전혀 다른 별개의 소켓이다.
듣기 소켓 : 연결 요청을 확인하는(듣는) 일만 수행, 연결 요청을 받으면 즉시 수신 대기열로 넘겨 다음 요청을 기다린다.
연결 소켓 : 실제 client 와의 통신
요청을 받아 들이는 과정과 통신하는 과정이 분리된다.
듣기 소켓과 연결소켓의 구분을 통해, 통신하는 중에도 다른 클라이언트의 연결 요청을 받아들일 수 있다.
그리고 이를 구현하기 위해 주로 멀티 프로세스나 멀티 스레딩 프로그래밍이 쓰인다.
기본적인 사용법은 아래와 같다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
struct sockaddr_in, client_sockaddr;
int client_sockfd;
int client_addr_size;
while(1){
client_addr_size = sizeof(client_addr);
client_sockfd = accept(sockfd,
(struct sockaddr *) &client_sockaddr,
&client_addr_size
);
if (client_sockfd == -1) {
// 에러 처리
}
else {
// client_sockfd를 이용해서 통신을 한다.
}
}
|
cs |
'TCP IP 소켓 프로그래밍' 카테고리의 다른 글
네트워크 바이트 순서(Network byte order) (0) | 2021.05.11 |
---|---|
4. 소켓 네트워크 프로그램 개발 - 6. 연결 요청(connect 함수) (0) | 2021.05.10 |
4. 소켓 네트워크 프로그램 개발 - 4. 수신 대기열 생성(listen 함수) (0) | 2021.05.10 |
4. 소켓 네트워크 프로그램 개발 - 3. 소켓 설정(bind 함수) (0) | 2021.05.10 |
4. 소켓 네트워크 프로그램 개발 - 2. 소켓의 생성(socket 함수) (0) | 2021.05.10 |
Comments