미리 보고 오면 좋은 함수들
bind() 함수란?
소켓에 IP 주소와 포트 번호를 할당하는 함수
생성된 소켓(socket)에 이름표를 붙이는 역할
Why Used?
소켓을 socket() 함수를 통해 생성하면, 아직 주소(IP + PORT)가 없는 상태
이 상태에선 외부에서 해당 소켓에 접근이 불가능
함수 원형
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
| 매개변수 | 설명 |
| sockfd | socket()으로 생성한 소켓 파일 디스크립터 |
| addr | IP 주소 + 포트 번호를 담은 구조체 |
| addrlen | 구조체의 크기 |
- sockaddr 구조체
struct sockaddr {
sa_family_t sa_family; // 주소 체계 (IPv4, IPv6 등)
char sa_data[14]; // 실제 주소 데이터
};
ⓐ. sa_family ( 주소 타입을 의미 )
| 값 | 의미 |
| AF_INET | IPv4 |
| AF_INET6 | IPv6 |
| AF_UNIX | 로컬 소켓 |
ⓑ. sa_data ( 실제 주소 정보 [IP + PORT 등] )
사람이 쓰기엔 너무 불편함 | 구조가 명확하지 않음
[ port | ip | 기타... ]
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
int main() {
struct sockaddr addr;
memset(&addr, 0, sizeof(addr));
addr.sa_family = AF_INET;
// 포트 4000
unsigned short port = htons(4000);
memcpy(&addr.sa_data[0], &port, 2);
// IP 127.0.0.1
unsigned int ip = inet_addr("127.0.0.1");
memcpy(&addr.sa_data[2], &ip, 4);
return 0;
}
- sockaddr_in 구조체
sockaddr 구조체 대신 사용 (바이트 단위로 직접 조립)
sockaddr_in 구조체 (이미 조립되어 있어 사용하기만 하면 되는 구조체)
struct sockaddr_in {
sa_family_t sin_family; // 주소 체계 (AF_INET)
uint16_t sin_port; // 포트 번호
struct in_addr sin_addr; // IP 주소
char sin_zero[8]; // padding
};
// bind 함수는 sockaddr 구조체로 매개변수가 고정되어 있어 실제로 아래와 같이 캐스팅 해서 사용
struct sockaddr_in addr;
bind(sock, (struct sockaddr*)&addr, sizeof(addr));
return (반환 값)
성공 : 0
실패 : -1
헤더 파일
#include <sys/socket.h>
사용 예시
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int sock;
struct sockaddr_in addr;
// 1. 소켓 생성
sock = socket(AF_INET, SOCK_STREAM, 0);
// 2. 주소 구조체 초기화
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET; // IPv4
addr.sin_port = htons(4000); // 포트 번호
addr.sin_addr.s_addr = htonl(INADDR_ANY); // 모든 IP 허용
// 3. bind
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
printf("bind error\n");
exit(1);
}
printf("bind 성공!\n");
return 0;
}
다음으로 공부해야 할 것
'정글캠프-WIL > C언어' 카테고리의 다른 글
| [C언어] - va_list 자료형 (1) | 2026.04.25 |
|---|---|
| [C언어] - connect() 함수 (0) | 2026.04.23 |
| [C언어] - accept() 함수 (0) | 2026.04.23 |
| [C언어] - listen() 함수 (0) | 2026.04.23 |
| [C언어] - socket() 함수 (0) | 2026.04.23 |