
socket_set_option 함수를 사용하여 소켓 옵션을 설정할 때, SO_REUSEADDR 옵션을 사용하여 소켓을 재사용할 수 있습니다.
SO_REUSEADDR 옵션을 사용하면 소켓이 종료된 후, 동일한 주소와 포트를 사용하는 새로운 소켓을 생성할 수 있습니다.
소켓을 재사용할 때, 다음 문제가 발생할 수 있습니다.
1. 소켓이 이미 사용 중인 경우, 새로운 소켓이 생성되지만, 이전 소켓의 연결이 끊어지지 않습니다.
2. 소켓이 이미 사용 중인 경우, 새로운 소켓이 생성되지만, 이전 소켓의 데이터가 새로운 소켓에 전달되지 않습니다.
SO_REUSEADDR 옵션을 사용하는 방법은 다음과 같습니다.
1. socket_set_option 함수를 사용하여 SO_REUSEADDR 옵션을 설정합니다.
#hostingforum.kr
c
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
perror("bind");
exit(1);
}
if (listen(sock, 3) == -1) {
perror("listen");
exit(1);
}
if (socket_set_option(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) {
perror("socket_set_option");
exit(1);
}
2. 소켓을 재사용할 때, 새로운 소켓을 생성하고, 이전 소켓의 연결을 끊어줍니다.
#hostingforum.kr
c
int new_sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (bind(new_sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
perror("bind");
exit(1);
}
if (listen(new_sock, 3) == -1) {
perror("listen");
exit(1);
}
// 이전 소켓의 연결을 끊어줍니다.
close(sock);
소켓을 재사용할 때, 주의할 점은 소켓이 이미 사용 중인 경우, 새로운 소켓이 생성되지만, 이전 소켓의 연결이 끊어지지 않습니다. 따라서, 새로운 소켓을 생성하고, 이전 소켓의 연결을 끊어줘야 합니다.
2025-05-25 07:08