소켓 오류는 네트워크 통신에서 매우 흔히 발생하며 연결 설정, 데이터 전송 및 연결 끊김을 포함한 프로세스의 여러 단계에서 발생할 수 있습니다. 이러한 오류는 네트워크 오류, 연결 시간 초과, 리소스 제한, 잘못된 구성 설정 등 다양한 요인으로 인해 발생할 수 있습니다.
"perror()" 및 "strerror()" 함수를 사용하여 C 프로그래밍 언어에서 소켓 오류를 잡는 방법에 대한 두 가지 다른 접근 방식에 대해 논의하겠습니다.
소켓 오류란 무엇입니까?
C 언어의 소켓 오류는 주로 음수 반환 값 또는 소켓 함수에서 반환되는 특정 오류 코드로 식별됩니다. 이러한 오류 코드는 오류의 성격에 대한 귀중한 정보를 제공하고 문제를 감지하고 해결하는 데 도움이 됩니다. 소켓 함수가 음수 값을 반환하면 실행 시 오류가 발생했다는 의미입니다. 예를 들어, "socket()" 함수가 소켓 생성에 실패하면 실패를 나타내기 위해 음수 값을 반환할 수 있습니다. 이를 확인함으로써 이러한 오류를 쉽게 감지하고 대응할 수 있습니다.
음수 반환 값 외에도 소켓 함수는 가장 최근의 시스템 또는 라이브러리 함수 호출과 관련된 특정 오류 코드를 저장하는 전역 변수인 "errno" 변수도 설정합니다. "errno" 변수는 "
프로그래밍 예제 1:Strerror()를 사용하여 소켓 오류 잡기
기능
#include
#include
#include
#include
#include
#include
정수 메인()
{
int 소켓 설명자;
struct sockaddr_in serverAddress;
//소켓 생성
소켓 설명자 =소켓(AF_INET, SOCK_STREAM, 0);
if (소켓 설명자 <0)
{
perror("소켓 생성 실패");
종료(EXIT_FAILURE);
}
// 서버 주소 설정
serverAddress.sin_family =AF_INET;
// 포트 번호 예시를 사용하겠습니다.
serverAddress.sin_port =htons (7070);
// 로컬 IP 주소
serverAddress.sin_addr.s_addr =inet_addr ("127.0.0.1");
// 서버에 연결
if (connect (socketDescriptor, (struct sockaddr * ) &serverAddress, sizeof (serverAddress)) <0)
{
perror("연결 실패");
종료(EXIT_FAILURE);
}
// 데이터 보내고 받기
//소켓을 닫아보자
닫기(socketDescriptor);
0을 반환합니다.
}
출력:
$ gcc 오류.c -o 오류
$ ./오류
연결 실패:연결이 거부되었습니다
설명:
이 프로그래밍 예제에서는 소켓() 함수를 사용하여 소켓을 만듭니다. 반환된 소켓 설명자가 0보다 작으면(소켓 생성 중 오류를 나타냄) "perror()" 함수를 사용하여 해당 오류 메시지를 표시하고 프로그램을 종료합니다. 연결을 설정하기 위해 서버 주소를 설정하고 connect() 함수를 사용하여 연결을 시도하여 반환 값이 0보다 작은지 확인합니다. 연결에 실패하면 다시 “perror()” 함수를 사용하여 오류 메시지를 표시하고 프로그램을 종료합니다. 이 접근 방식을 사용하면 C 언어에서 소켓 오류를 쉽게 잡을 수 있습니다. 이를 통해 유익한 오류 메시지를 표시하고 프로그램을 적절하게 종료할 수 있습니다.
프로그래밍 예제 2:Perror() 함수를 사용하여 소켓 오류 잡기
#include
#include
#include
#include <문자열.h>
#include
#include
#include
#include
정수 메인()
{
int 소켓 설명자;
struct sockaddr_in serverAddress;
//소켓 생성
소켓 설명자 =소켓(AF_INET, SOCK_STREAM, 0);
if (소켓 설명자 <0)
{
fprintf(stderr, "소켓 생성 실패:%s \n", strerror (errno));
종료(EXIT_FAILURE);
}
// 서버 주소 설정
serverAddress.sin_family =AF_INET;
// 포트 번호 예시를 사용하겠습니다.
serverAddress.sin_port =htons (7070);
// 로컬 IP 주소
serverAddress.sin_addr.s_addr =inet_addr ("127.0.0.1");
// 이제 서버 연결을 시도합니다.
if (connect (socketDescriptor, (struct sockaddr *) &serverAddress, sizeof (serverAddress)) <0) {
fprintf(stderr, "연결 실패:%s\n", strerror (errno));
종료(EXIT_FAILURE);
}
// 데이터 보내고 받기
//소켓을 닫는다
if(닫기(socketDescriptor) <0)
{
fprintf(stderr, "소켓 폐쇄 실패:%s\n", strerror (errno));
종료(EXIT_FAILURE);
}
printf("소켓이 성공적으로 닫혔습니다.\n");
0을 반환합니다.
}
출력:
$ gcc 오류.c -o 오류
$ ./오류
연결 실패:연결이 거부되었습니다
설명:
이 프로그래밍 예제에서는 "strerror()" 함수를 사용하여 C의 소켓 오류를 포착합니다. 이 함수를 사용하면 "errno" 변수에 저장된 오류 코드를 사람이 읽을 수 있는 오류 메시지로 변환할 수 있습니다. "
결론
소켓 함수가 제공하는 반환 값과 오류 코드를 이해함으로써 C에서는 이러한 소켓 오류를 쉽게 포착하고 처리할 수 있습니다. 첫 번째 프로그래밍 예제에서는 "perror()" 함수를 사용하여 오류와 반환 값을 포착하는 방법을 설명했습니다. 두 번째 예에서는 자세한 오류 메시지를 얻기 위한 “strerror()” 함수를 설명했습니다. 이러한 방법을 이해함으로써 유익한 오류 메시지를 표시하고 소켓 프로그래밍에서 프로그램을 적절하게 종료할 수 있습니다.
작가 소개
밤데브 고쉬
Bamdeb Ghosh는 무선 네트워킹 분야에서 실무 경험을 갖고 있습니다. 그는 Android, Bluetooth, Linux 명령 및 Python에 대한 지식과 함께 무선 또는 유선 네트워킹에 대한 Wireshark 캡처 분석 전문가입니다. 그의 사이트를 팔로우하세요:wifisharks.com