[Linux Socket] Server - socket() 함수[1]

소켓 생성

#include <netdb.h>

int socket(int domain, int type, int protocol);

 

매개변수

1) domain

인터넷 프로토콜 버전 선택 - AF_INET(IPv4) / AF_INET6(IPv6)

*인터넷 프로토콜: 데이터 패킷이 네트워크를 통해 이동하고 올바르게 도착하게 하기 위한 규칙

프로토콜에 대해 알아보기

 

2) type

프로토콜의 동작 방식 선택 - SOCK_STREAM(TCP 기반 통신) / SOCK_DGRAM(UDP 기반 통신)

SOCK_STREAM, SOCK_DGRAM에 대해 알아보기

 

3) protocol

필수 항목  X - 입력을 원치 않을 경우 0

type 선택으로 이미 프로토콜을 알기 때문에 명시적인 용도로 지정

프로토콜 정보 지정 - IPPROTO_TCP(TCP 지정), IPPROTO_TCP(UDP 지정)

 

 

소켓 함수 호출 결과 값

- 네트워크 프로그래밍을 위해서 소켓을 생성하면 운영체제마다 부르는 명칭이 다르다.

Windows Linux
Handle 소켓 파일
(소켓 생성 = 이름 없는 파일 생성)

 Linux의 소켓 파일에는 이름이 없다. 없는데 어떻게 사용할 수 있을까?!

➡️ 파일 디스크립터 리턴

파일 디스크립터

- Linux는 각각의 파일을 구분하기 위해서 각 파일마다 번호를 배정하는데 이 번호(정수값)를 말한다.
- 소켓을 생성 ➡️ 소켓 파일 생성 ➡️ 소켓 파일에 대한 파일 디스크립터 배정

 

소켓 생성 코드

#include <cstdio>
#include <stdlib.h>
#include <netdb.h>

int main()
{
    // 1. Socket 생성
    int socket = socket(AF_INET, SOCK_STREAM, 0);

    if (socket == -1) {
        printf("Socket() 에러");
        exit(1);
    }

    return 0;
}

 

 

 

참조🔗: https://www.cloudflare.com/ko-kr/learning/network-layer/internet-protocol/

'Network > Socket' 카테고리의 다른 글

🔖IP 주소 변환 함수  (0) 2023.05.09
🔖SOCKADDR VS SOCKADDR_IN  (0) 2023.05.09
[Linux Socket] Server - bind() 함수[2]  (0) 2023.05.04
🔖 SOCK_STREAM VS SOCK_DGAM  (0) 2023.05.04
소켓(SOCKET)이란?  (0) 2023.05.03