본문으로 바로가기

[C] socket 함수

category 프로그래밍/C 2020. 3. 5. 20:21
728x90
반응형

통신을 하기 위해서 제일 많이쓰는 방법 중 하나가 소켓을 이용하는 것입니다.

 

오늘은 이 소켓 통신을 하기 위한 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) 해야지 비로소 소켓을 사용할 수 있습니다.

728x90
반응형

'프로그래밍 > 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