
SO_REUSEADDR 옵션은 소켓을 재사용할 수 있도록 해주는 옵션입니다.
예를 들어, 서버 프로그램을 종료하고 다시 실행하는 경우, 이전에 사용한 포트를 다시 사용할 수 있습니다.
이 옵션을 사용하면, 소켓이 종료된 후에도 소켓을 다시 열 수 있기 때문에, 서버 프로그램을 종료하고 다시 시작할 때, 이전에 사용한 포트를 다시 사용할 수 있습니다.
이 옵션을 사용하는 예제는 다음과 같습니다.
#hostingforum.kr
c
#include
#include
#include
int main() {
int sock;
struct sockaddr_in serv_addr;
int optval;
socklen_t optlen = sizeof(optval);
// 소켓을 생성하고 SO_REUSEADDR 옵션을 설정
sock = socket(AF_INET, SOCK_STREAM, 0);
optval = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
// 서버 주소 설정
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);
// 서버를 시작
bind(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(sock, 5);
printf("서버가 시작되었습니다.n");
// 클라이언트를 기다립니다.
while (1) {
int client_sock;
struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
client_sock = accept(sock, (struct sockaddr*)&client_addr, &client_len);
if (client_sock < 0) {
perror("accept failed");
continue;
}
printf("클라이언트가 연결되었습니다.n");
// 클라이언트와 통신합니다.
char buffer[256];
recv(client_sock, buffer, 256, 0);
printf("클라이언트가 보낸 메시지: %sn", buffer);
close(client_sock);
}
close(sock);
return 0;
}
이 예제에서, 서버 프로그램을 종료하고 다시 시작할 때, 이전에 사용한 포트를 다시 사용할 수 있습니다.
2025-04-06 15:02