
SO_LINGER 옵션은 소켓에서 데이터를 전송하는 동안 일시적으로 소켓을 닫을 수 있는 옵션입니다. 이 옵션을 사용하면 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 소켓을 닫을 때 데이터를 전송하는 대신 데이터를 전송하지 않고 소켓을 닫을 수 있습니다.
SO_LINGER 옵션을 사용하기 위해서는 socket_get_option() 함수를 사용하여 SO_LINGER 값을 설정해야 합니다.
#hostingforum.kr
c
int linger = 1; // linger 옵션을 1로 설정
int optval = linger;
setsockopt(fd, SOL_SOCKET, SO_LINGER, &optval, sizeof(optval));
이러한 옵션을 사용할 때 주의할 점은, SO_LINGER 옵션을 사용하면 데이터가 전송되지 않은 채로 소켓을 닫을 수 있으므로, 데이터 전송이 완료된 후 소켓을 닫는 것이 좋습니다.
또한, SO_LINGER 옵션을 사용할 때는 SO_LINGER_TIME 옵션도 함께 사용하는 것이 좋습니다. SO_LINGER_TIME 옵션은 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 데이터를 전송하는 데 필요한 시간을 설정하는 옵션입니다.
#hostingforum.kr
c
int linger_time = 5; // linger_time 옵션을 5초로 설정
int optval = linger_time;
setsockopt(fd, SOL_SOCKET, SO_LINGER, &optval, sizeof(optval));
이러한 옵션을 사용하면 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 데이터를 전송하는 데 필요한 시간을 설정할 수 있습니다.
#hostingforum.kr
c
int main() {
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct linger linger_opt;
linger_opt.l_onoff = 1;
linger_opt.l_linger = 5;
setsockopt(fd, SOL_SOCKET, SO_LINGER, &linger_opt, sizeof(linger_opt));
// 소켓을 닫습니다.
close(fd);
return 0;
}
이러한 예제에서, 소켓을 닫을 때 데이터가 전송되지 않은 채로 남아 있는 경우, 5초 동안 데이터를 전송하도록 설정되어 있습니다.
이러한 옵션을 사용할 때는 주의할 점이 있으므로, 데이터 전송이 완료된 후 소켓을 닫는 것이 좋습니다.
2025-04-13 17:25