[c++] 네트워크 프로그래밍에서의 소켓 타임아웃 관리
네트워크 프로그래밍에서 소켓 타임아웃은 매우 중요합니다. 소켓 타임아웃 설정은 서버와 클라이언트간의 통신 시간 제한을 설정하고, 무한정 대기 상태로 빠지지 않도록 도와줍니다.
이전에 TCP 소켓에 연결하는 데 시간 초과를 설정하는 방법과 관련한 코드를 보여드릴까요?
TCP 소켓의 연결 시간 초과 설정
일반적으로 C++에서 소켓의 연결 시간 초과를 관리하기 위해 소켓 옵션을 사용합니다. 아래 예시에서는 SO_SNDTIMEO
와 SO_RCVTIMEO
를 이용해 연결 시간 초과를 설정하고 있습니다.
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == -1) {
// handle error
}
struct timeval timeout;
timeout.tv_sec = 10; // 초 단위
timeout.tv_usec = 0; // 마이크로초 단위
if (setsockopt(clientSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
// handle error
}
if (setsockopt(clientSocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
// handle error
}
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) {
// handle error
}
// 연결 후에 다음 동작 수행
close(clientSocket);
return 0;
}
위 코드는 connect
함수로 소켓을 연결할 때, 10초의 타임아웃을 설정하고 있습니다.
마무리
소켓 타임아웃 설정을 통해 네트워크 프로그래밍에서 발생할 수 있는 다양한 문제를 방지할 수 있습니다. 주의할 점은 타임아웃 값은 너무 짧지도, 너무 길지도 않도록 적절하게 설정하는 것입니다.
이 글이 도움이 되었기를 바라며, 더 궁금한 점이 있으시다면 추가적인 정보를 찾아보시는 것을 권장드립니다.
관련 문서: The Linux Programming Interface