[c++] 소켓 통신을 위한 에러 핸들링 구현
이번 포스트에서는 C++을 사용하여 소켓 통신에 대한 에러 핸들링을 구현하는 방법에 대해 알아보겠습니다.
소켓 에러 핸들링
에러 코드 확인
소켓 통신 시 발생하는 에러는 errno
이나 WSAGetLastError()
함수를 통해 확인할 수 있습니다. 에러가 발생했을 때 해당 함수를 호출하여 에러 코드를 확인하고, 다양한 에러 상황에 대해 대응할 수 있습니다.
다음은 에러 코드를 확인하는 예제 코드입니다.
#include <iostream>
#include <cerrno>
#include <cstring>
#ifdef _WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#include <unistd.h>
#endif
int main() {
// ... 소켓 통신 코드 ...
// 소켓 통신 중 에러 발생
int error = 0;
#ifdef _WIN32
error = WSAGetLastError();
#else
error = errno;
#endif
std::cout << "Error code: " << error << " - " << std::strerror(error) << std::endl;
// 에러 코드에 따른 처리 로직 구현
// ...
return 0;
}
에러 핸들링
에러 코드를 확인한 후에는 각 에러 상황에 맞는 적절한 처리를 해주어야 합니다. 예를 들어, 연결이 끊겼을 때는 다시 연결을 시도하거나 프로그램을 종료할 수 있습니다.
다음은 에러 핸들링을 추가한 예제 코드입니다.
#include <iostream>
#include <cerrno>
#include <cstring>
#ifdef _WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#include <unistd.h>
#endif
void handleSocketError() {
int error = 0;
#ifdef _WIN32
error = WSAGetLastError();
#else
error = errno;
#endif
std::cerr << "Socket error: " << error << " - " << std::strerror(error) << std::endl;
// 에러 코드에 따른 처리 로직 구현
}
int main() {
// ... 소켓 통신 코드 ...
if (/* 에러 조건 */) {
handleSocketError();
// 에러에 대한 추가적인 처리 로직 수행
}
// ...
return 0;
}
마무리
위의 예제 코드를 참고하여, 소켓 통신 중 발생할 수 있는 에러에 대해 적절한 핸들링을 구현할 수 있습니다. 안정적인 소켓 통신을 위해 에러 핸들링은 중요한 부분이므로, 실제 상황에 맞게 에러 코드를 처리하는 데에 유의하시기 바랍니다.
참고 문헌:
- MSDN, “Winsock Error Codes” (https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2)
이상으로 소켓 통신을 위한 에러 핸들링 구현에 대해 알아보았습니다. 부족한 부분이나 추가할 내용이 있으면 보강해주십시오.