
socket_set_timeout 함수는 소켓의 시간 제한을 설정하는 데 사용됩니다. 하지만, 이 함수를 사용하여 설정한 시간 제한이 실제로 적용되는지 확인하는 방법은 두 가지입니다.
첫 번째 방법은 소켓에 데이터를 전송하는 동안 sleep 함수를 사용하여 5초를 기다린 다음, 소켓의 데이터를 읽어보는 것입니다. 만약 데이터가 읽어질 수 없다면, 시간 제한이 실제로 적용된 것입니다.
두 번째 방법은 select 함수를 사용하여 소켓의 읽기 가능 여부를 확인하는 것입니다. 만약 select 함수가 5초를 기다리면, 시간 제한이 실제로 적용된 것입니다.
예를 들어, 소켓에 5초의 시간 제한을 설정한 후, 소켓에 데이터를 전송하는 코드는 다음과 같습니다.
#hostingforum.kr
c
#include
#include
#include
#include
#include
#include
#include
int main() {
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);
if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror("connect");
exit(1);
}
if (socket_set_timeout(sock, 5) < 0) {
perror("socket_set_timeout");
exit(1);
}
char buffer[1024];
send(sock, "Hello, server!", 13, 0);
// 첫 번째 방법: sleep 함수 사용
// sleep(5);
// recv(sock, buffer, 1024, 0);
// 두 번째 방법: select 함수 사용
fd_set read_fds;
FD_ZERO(&read_fds);
FD_SET(sock, &read_fds);
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
if (select(sock + 1, &read_fds, NULL, NULL, &tv) == 0) {
printf("시간 제한이 실제로 적용되었습니다.n");
} else {
printf("시간 제한이 실제로 적용되지 않았습니다.n");
}
close(sock);
return 0;
}
이 코드는 소켓에 5초의 시간 제한을 설정한 후, 소켓에 데이터를 전송하고, 두 번째 방법인 select 함수를 사용하여 시간 제한이 실제로 적용된지 확인합니다.
2025-03-31 01:15