통신을 하기 위해서 제일 많이쓰는 방법 중 하나가 소켓을 이용하는 것입니다.
오늘은 이 소켓 통신을 하기 위한 socket 함수에 대해서 알아보겠습니다.
리눅스에서 TCP 소켓 예제를 보면 제일 먼저 호출하는 함수가 socket입니다.
socket 함수는 시스템과 시스템간의 입구라고 할 수 있습니다.
socket 함수를 통하여 다양한 소켓을 만들 수 있습니다
socket 함수는 아래와 같이 정의되어 있습니다.
int socket(int domain, int type, int protocol);
파라미터인 domain, type, protocol에 대해 간략히 살펴보겠습니다.
domain | AF_UNIX | 유닉스 도메인 소켓 |
AF_INET | IPv4 도메인 소켓 | |
AF_INET6 | IPv6 도메인 소켓 | |
type | SOCK_STREAM | 스트림 소켓 |
SOCK_DGRAM | 데이터그램 소켓 | |
SOCK_RAW | raw 소켓 | |
protocl | IPPROTO_IP | IP 프로토콜 사용 |
IPPROTO_TCP | TCP 프로토콜 사용 ( SOCK_STREAM ) | |
IPPROTO_UDP | UDP 프로토콜 사용 ( SOCK_DGRAM ) | |
IPPROTO_ICMP | ICMP 프로토콜 사용 |
소켓의 파라미터는 위의 것들을 주로 사용합니다.
domain
이 옵션은 AF대신 PF를 사용한 것도 보셨을 겁니다.
PF는 Protocol Family로 BSD 계절에서 사용되어 왔으나, 지금은 같다고 보시면 됩니다.
또한, AF_UNIX는 도메인 소켓을 의미하기 때문에 local 시스템에서만 접근이 가능합니다.
AF_INET은 IPv4 도메인 소켓이시 때문에 다른 시스템의 접근이 가능합니다.
type
socket 함수에서는 SOCK_STREAM과 SOCK_DGRAM을 가장 많이 사용합니다.
SOCK_RAW는 raw 소켓을 사용할 때 씁니다. 패킷을 변경해야할 필요가 있을 때 사용합니다.
SOCK_STREAM은 연결 지향형 소켓이기 때문에 TCP로 사용하고, 1:1로 통신합니다.
제일 많이 사용하는 것이 TCP 입니다.
SOCK_DGRAM은 비 연결 지향형 소켓이기 때문에 UDP로 사용ㅎ바니다.
protocol
전송에 사용될 프로토콜 타입을 의미합니다.
대부분 IPPROTO_IP를 사용합니다.
TCP나 UDP를 사용하더라도 IPPROTO_IP를 사용하면 자동으로 세팅을 해줍니다.
더 구체적으로 IPPROTO_TCP, IPPROTO_UDP를 써도 됩니다.
처음 socket함수로 소켓을 만들면, 함수 호출 시에 입력한 속성들만 가지고 있을 뿐, 빈 소켓이라서 아무것도 할 수 없습니다.
그래서 이 소켓을 꾸미고(ip, port 설정), 부착(bind) 해야지 비로소 소켓을 사용할 수 있습니다.
'프로그래밍 > C' 카테고리의 다른 글
[c언어] 소켓 함수 타임아웃 (0) | 2020.07.21 |
---|---|
[C] TCP 소켓 (0) | 2020.03.09 |
[C] 메모리 (0) | 2019.12.04 |
[C] fflush 함수 (0) | 2019.11.28 |
[C] exec 계열의 함수 (0) | 2019.11.05 |