Socket Programming in C: Socket API functions
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