일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 스토어드 프로시저
- Hash
- Stored Procedure
- binary search
- SQL
- String
- DP
- Brute Force
- Two Points
- MYSQL
- 그래프
- Trie
- union find
- 다익스트라
- two pointer
- Dijkstra
- 이진탐색
Archives
- Today
- Total
codingfarm
4. 소켓 네트워크 프로그램 개발 - 2. 소켓의 생성(socket 함수) 본문
학습 목표
- socket 함수를 이용하여 소켓을 생성하는 방법을 터득
앞서 일반적으로 소켓통신에서는 버클리 소켓을 사용한다고 앞서 설명했다.
하지만 이 버클리 소켓은 windows와 linux OS에서 각기 다른 헤더파일에 존재한다.
- windows : winsock2.h
- linux : sys/socket.h
docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket
int socket(int domain, int type, int protocol);
|
cs |
endpoint 소켓
- socket 함수에 의해 생성되는 종점 소켓
- 서버와 클라이언트의 연결을 받기 위함
- 2가지 용도로 쓰임
- client : 연결 요청
- server : (client의 요청을) 듣기
- client와 server의 입장에서 다르게 불림
- client : 연결 소켓(connected socket)
- server : 듣기 소켓(listen socket)
이제 socket함수의 매개변수에 대해 알아보겠다.
1. 도메인(domain)
- 어떤 영역에서 통신할 것인지를 지정
- 도메인 매개변수에 주로 사용하는 값들
매개변수 | 기능 |
AF_UNIX | 시스템 내부 영역에서 IPC를 위해서 사용됨 자세한 용도는 11장에서 설명 내부 통신용 |
AF_INET | 인터넷 영역에서 물리적으로 떨어진 컴퓨터 사이의 통신에 사용됨 일반적인 네트워크 프로그램에서 사용되는 값 IPv4를 사용 별다른 언급이 없으면 앞으로 이 매개변수를 쓸것 인터넷 통신용 |
AF_INET6 | AF_INET과 같다. IPv6를 사용 |
AF_X25 | X.25 아마추어 라디오용 프로토콜 |
주로 AF_UNIX와 AF_INET을 쓸것이다.
IP 버전
IP도 프로그램처럼 버전이 있다.
가장 널리 쓰이는 IP 버전은 4로 IPv4라고 표기된다.
현재 6버전 까지 나와있다.
2. 타입(type)
- 데이터 통신에 쓰일 프로토콜 유형의 지정에 쓰임
매개변수 | 기능 |
SOCK_STREAM | 연결지향의 TCP/IP 기반 통신에서 사용 |
SOCK_DGRAM | 데이터그램 방식의 UDP/IP 기반 통신에 사용 |
SOCK_RAW | TCP/IP의 복잡함을 감추지 않고, 직접 다룰 수 있는 프로토콜 21장에서 자세히 다룰것 |
3. 프로토콜(protocol)
- 도메인과 유형에 따라 호스트 간 통신에 사용할 프로토콜을 결정
매개변수 | 기능 |
IPPROTO_TCP | TCP 프로토콜로 AF_INET 도메인과 SOCK_STREAM 유형과 함께 사용됨 |
IPPROTO_UDP | UDP 프로토콜로 AF_INET 도메인과 SOCK_DGRAM 유형과 함께 사용됨 |
return
- data type : int
- 의미
- -1 : 실패
- 0 이상 : 성공, 소켓 객체를 가리키는 숫자
- 반환값을 socket descriptor 혹은 소켓 지정 번호라고 부른다.
위 그림은 소켓 지정 번호가 어떻게 사용되는지를 보여준다
소켓지정 번호 4를 이용하여 소켓에 접근한 후, 해당 소켓을 통해 통신이 이루어지게 한다.
인터넷을 위한 소켓을 직접 생성하는 법은 아래와 같다.
int sockfd;
if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
// error
}
|
cs |
'TCP IP 소켓 프로그래밍' 카테고리의 다른 글
4. 소켓 네트워크 프로그램 개발 - 4. 수신 대기열 생성(listen 함수) (0) | 2021.05.10 |
---|---|
4. 소켓 네트워크 프로그램 개발 - 3. 소켓 설정(bind 함수) (0) | 2021.05.10 |
4. 소켓 네트워크 프로그램 개발 - 1. 네트워크 프로그래밍 소개 (0) | 2021.05.09 |
3. 소켓 네트워크 프로그래밍에 대한 이해 (0) | 2020.10.23 |
1. 네트워크와 TCP/IP (2) | 2019.08.18 |
Comments