TCP / IP 소켓 필수 함수 정리

2025. 7. 31. 23:26·NETWORK/Study

1. socket()

📌 역할

소켓(파일 디스크립터)을 생성합니다. TCP/UDP, IPv4/IPv6 등 타입을 설정할 수 있어요.

📘 함수 원형

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

🔸 주요 인자

인자설명
domain 주소 체계 (예: AF_INET = IPv4, AF_INET6 = IPv6)
type 소켓 타입 (예: SOCK_STREAM = TCP, SOCK_DGRAM = UDP)
protocol 일반적으로 0 (자동 선택)
 

✅ 사용 예시

int sockfd = socket(AF_INET, SOCK_STREAM, 0); // TCP 소켓 생성

2. bind()

📌 역할

서버에서 사용할 IP 주소와 포트 번호를 소켓에 연결합니다.

📘 함수 원형

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

🔸 주요 인자

인자설명
sockfd socket()으로 생성한 소켓 디스크립터
addr IP, 포트 정보를 담은 구조체 (struct sockaddr_in)
addrlen 구조체 크기 (보통 sizeof(struct sockaddr_in))
 

✅ 사용 예시

 
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(12345);

bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));

3. listen()

📌 역할

소켓을 수신 대기 상태로 만듭니다 (클라이언트 연결을 기다림).

📘 함수 원형

int listen(int sockfd, int backlog);

🔸 주요 인자

인자설명
sockfd bind()한 서버 소켓
backlog 대기열 크기 (동시 접속 허용 수)
 

✅ 사용 예시

listen(sockfd, 5); // 최대 5개의 연결을 큐에 보관

4. accept()

📌 역할

클라이언트 연결을 수락하고 새로운 소켓을 생성합니다.

📘 함수 원형

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
 

🔸 주요 인자

인자설명
sockfd listen()한 소켓
addr 연결된 클라이언트 주소를 저장할 구조체
addrlen 주소 구조체의 크기를 담고 있는 포인터
 

✅ 사용 예시

struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);

int client_sock = accept(server_sock, (struct sockaddr*)&client_addr, &client_len);
 

5. connect()

📌 역할

클라이언트가 서버에 연결 요청합니다.

📘 함수 원형

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

🔸 주요 인자

인자설명
sockfd socket()으로 만든 클라이언트 소켓
addr 연결할 서버 주소 (sockaddr_in)
addrlen 구조체 크기
 

✅ 사용 예시

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(12345);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

connect(client_sock, (struct sockaddr*)&server_addr, sizeof(server_addr));

6. send() / recv()

📌 역할

TCP 연결된 소켓 간에 데이터를 보내고(receive) 받습니다(send).

📘 함수 원형

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);

🔸 주요 인자

인자설명
sockfd 연결된 소켓
buf 데이터 버퍼 (문자열/바이트)
len 전송할 데이터 길이
flags 일반적으로 0
 

✅ 사용 예시

char msg[] = "hello";
send(sock, msg, strlen(msg), 0);

char buf[1024];
int len = recv(sock, buf, sizeof(buf), 0);

7. close()

📌 역할

소켓 연결을 종료합니다.

📘 함수 원형

int close(int sockfd);

✅ 사용 예시

close(sockfd);

✅ 보너스: 주소 변환 함수

htons(), htonl()

  • 호스트 바이트 순서 → 네트워크 바이트 순서 변환
unsigned short htons(unsigned short hostshort);
unsigned long htonl(unsigned long hostlong);

inet_addr() / inet_ntoa()

  • 문자열 → IP 주소 변환
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

🔍 요약: 가장 많이 쓰는 기본 흐름

서버 측 순서:

1. socket()

2. bind()

3. listen()

4. accept()

5. recv()/send()

6. close()

 

클라이언트 측 순서:

1. socket()

2. connect()

3. send()/recv()

4. close()

'NETWORK > Study' 카테고리의 다른 글

네트워크 03 : TCP/IP 인터넷 계층  (1) 2026.04.30
네트워크 02 : TCP/IP 네트워크 인터페이스 계층  (0) 2026.04.29
네트워크 01 : 네트워크(OSI 7 계층, TCP/IP 4 계층)  (0) 2026.04.28
★매우 중요★ / QT의 TCP 통신의 프로토콜 설계(프레이밍 및 파싱)  (0) 2025.09.01
★매우중요★ QT에서 TCP 통신 과정  (0) 2025.09.01
'NETWORK/Study' 카테고리의 다른 글
  • 네트워크 02 : TCP/IP 네트워크 인터페이스 계층
  • 네트워크 01 : 네트워크(OSI 7 계층, TCP/IP 4 계층)
  • ★매우 중요★ / QT의 TCP 통신의 프로토콜 설계(프레이밍 및 파싱)
  • ★매우중요★ QT에서 TCP 통신 과정
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
TCP / IP 소켓 필수 함수 정리
상단으로

티스토리툴바