오류 관리는 PHP로 프로그래밍 할 때 네트워크 커뮤니케이션 프로그램을 디버깅하고 유지 관리하는 데 중요한 부분입니다. socket_last_error () 및 socket_clear_error () 는 오류 처리를 위해 PHP에서 제공하는 두 가지 함수입니다. 개발자가 가장 최근의 소켓 오류 정보를 얻고 지우도록 도와 줄 수 있습니다. 이 기사는이 두 기능을 사용하는 방법을 자세히 설명하고 예제를 사용하여 오류 코드를 필터링하는 방법과 명확한 오류 정보를 보여줍니다.
Socket_last_error ()는 마지막 소켓 작동의 오류 코드를 반환하는 데 사용됩니다. 프로토 타입은 다음과 같습니다.
int socket_last_error ([ resource $socket ] )
매개 변수 $ 소켓은 선택 사항입니다. 특정 소켓 자원이 전달되면 소켓의 오류 코드가 반환됩니다. 전달되지 않으면 기본값이 발생한 오류 코드가 반환됩니다.
리턴 값은 오류 코드를 나타내는 정수입니다.
Socket_clear_error ()는 최신 소켓 오류 레코드를 지우는 데 사용됩니다. 프로토 타입은 다음과 같습니다.
void socket_clear_error ([ resource $socket ] )
매개 변수 $ 소켓 도 선택 사항입니다. 통과하지 않으면 글로벌 소켓 오류를 지우십시오. 특정 소켓 리소스가 전달되면 리소스의 오류 레코드를 지우십시오.
다음은 간단한 TCP 클라이언트 연결 예입니다.이 두 기능을 사용하여 오류를 캡처, 필터링 및 명확하게하는 방법을 보여줍니다.
<?php
// a TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// 존재하지 않는 주소에 불법적으로 연결합니다,트리거 오류
$host = 'm66.net';
$port = 9999; // 이 포트에 서비스 청취가 없다고 가정하십시오
@socket_connect($socket, $host, $port);
// 오류 코드를 가져옵니다
$errorCode = socket_last_error($socket);
if ($errorCode !== 0) {
// 오류 메시지를 받으십시오
$errorMessage = socket_strerror($errorCode);
echo "연결이 실패했습니다,오류 코드: $errorCode,오류 메시지: $errorMessage\n";
// 根据오류 코드进行逻辑判断
if ($errorCode === 111 || $errorCode === 10061) {
echo "대상 호스트는 연결을 거부합니다,조사하다 m66.net:$port 서비스 활성화 여부。\n";
} elseif ($errorCode === 110 || $errorCode === 10060) {
echo "연결 시간 초과,확인하십시오 m66.net 접근 가능합니까?。\n";
}
// 오류 상태를 지우십시오
socket_clear_error($socket);
}
// 프로그램 논리를 계속하십시오...
socket_close($socket);
?>
위 코드에서 :
@socket_connect를 사용하여 기본 경고 메시지를 억제하십시오.
socket_last_error () 를 통해 특정 오류 코드를 가져옵니다.
socket_strerror ()를 사용하여 오류 코드를 사람이 읽을 수있는 문자열로 변환합니다.
오류 코드를 사용하여 연결이 거부되었는지, 시간 초과 또는 기타 문제가 있는지 확인하십시오.
마지막으로, socket_clear_error ()를 사용하여 후속 오해를 피하기 위해 오류를 지우십시오.
오류 코드 | 의미 |
---|---|
111 | 연결 거부 (Linux) |
110 | 연결시기 (Linux) |
10061 | 연결 거부 (Windows) |
10060 | 연결 시간 (Windows) 연결 |