CS/풀스택서비스네트워킹

Socket Programming in C: Socket API functions

arsenic-dev 2025. 6. 7. 05:37

Socket

Socket Address = TCP or UDP의 Port number + IP의 Address

Socket은 Transport Layer(4)와 Network Layer(3) 간 정보를 주고받기 위한 구멍이다.

 

Header files

File Description
sys/socket.h 소켓 생성, 바인딩, 수신, 전송 등 소켓 함수들의 기본 정의 포함 (e.g., socket, bind, listen, accept)
netinet/in.h AF_INET, AF_INET6, PF_INET, PF_INET6 등 표준 IP 주소와 TCP/UDP 포트 번호 정의
sys/un.h 동일 컴퓨터에서 실행되는 프로그램 간의 로컬 통신(UNIX 도메인 소켓 통신)을 위한 기능 제공
arpa/inet.h IP 주소 변환 함수 정의 (e.g., inet_pton, inet_ntoa)
netdb.h DNS 관련 함수 정의 (e.g., gethostbyname, getaddrinfo)
stdio.h, stdlib.h, string.h C 기본 함수들 (e.g., printf, exit, memset)
unistd.h read, write, close

 

Socket API functions

▶ Flow diagram of client-server transaction using sockets with the TCP

 

1. socket

정수로 식별되는 특정 유형의 새로운 소켓을 만들고 이에 시스템 리소스를 할당한다.

 

arguments:

1) domain

  • PF_INET: IPv4
  • PF_INET6: IPv6
  • PF_UNIX: local socket

2) type

  • SOCK_STREAM: TCP
  • SOCK_DGRAM: UDP

3) protocol

  • IPPROTO_TCP
  • IPPROTO_UDP

오류 발생 시 -1을, 성공 시 식별자를 나타내는 정수를 반환한다.

 

2. bind

일반적으로 서버 측에서 사용되며 소켓을 소켓 주소 구조, 즉 지정된 로컬 IP 주소와 포트 번호와 연결한다.

 

arguments:

1) sockfd: socket() 함수로 생성한 소켓의 파일 디스크립터(식별자 - 정수 번호)

2) my_addr: 소켓에 할당할 IP 주소와 Port 정보를 담은 구조체 주소 (e.g., sockaddr_in, sockaddr_in6)

3) addrlen: my_addr에 저장된 주소 구조체의 크기 (바이트 단위)

 

오류 발생 시 -1을, 성공 시 0을 반환한다.

 

3. listen

서버 측에서 사용되며, 바인딩된 TCP 소켓이 수신 상태로 전환되도록 한다.

 

오류 발생 시 -1을, 성공 시 0을 반환한다.

 

arguments:

1) sockfd

2) backlog: 서버가 accept 하기 전에 대기할 수 있는 클라이언트의 최대 연결 요청 수 정의

 

4. accept

서버 측에서 원격 클라이언트로부터 새로운 TCP 연결을 생성하려는 수신 시도를 받아들이고, 이 연결의 소켓 주소쌍과 연관된 새 소켓을 생성한다.

 

arguments:

1) sockfd

2) cliaddr: 연결 요청을 보낸 클라이언트의 주소 정보인 IP와 Port를 담기 위한 구조체 주소

3) addrlen: cliaddr에 저장된 주소 구조체의 크기

 

오류 발생 시 -1을, 성공 시 새 소켓 식별자를 나타내는 정수를 반환한다.

 

5. connect

TCP의 클라이언트 측에서 사용되며, 소켓에 사용 가능한 로컬 포트 번호를 할당한다.

 

오류 발생 시 -1을, 성공 시 0을 반환한다. 

 

6. send, recv / sendto, recvfrom

1) send / recv

TCP 방식에서 사용되며, 연결된 소켓을 통해 데이터를 주고받는다.

 

오류 발생 시 -1을, 성공 시 전송 or 수신한 바이트 수를 반환한다.

 

2) sendto, recvfrom

UDP 방식에서 사용되며, 목적지 주소를 함께 명시해야 한다.

 

오류 발생 시 -1을, 성공 시 전송 or 수신한 바이트 수를 반환한다.

 

7. close

열려 있는 소켓을 닫고 해당 소켓에 할당된 시스템 리소스를 해제한다.

 

arguments:

1) sockfd: 닫을 소켓의 식별자

 

오류 발생 시 -1을, 성공 시 0을 반환한다.

 

8. gethostbyname and gethostbyaddr

IPv4에서만 사용 가능한 함수로, 호스트 이름과 주소를 확인하는 데 사용한다.

 

arguments:

1) name: 변환하고 싶은 호스트 이름 또는 도메인명

2) addr: 변환하고 싶은 IP 주소의 포인터

3) len: addr의 크기 (일반적으로 sizeof(struct in_addr))

4) type: 주소 타입 (AF_INET)


참고자료

https://en.wikipedia.org/wiki/Berkeley_sockets

 

Berkeley sockets - Wikipedia

From Wikipedia, the free encyclopedia Inter-process communication API A Berkeley (BSD) socket is an application programming interface (API) for Internet domain sockets and Unix domain sockets, used for inter-process communication (IPC). It is commonly impl

en.wikipedia.org