PHP를 사용하여 네트워크 커뮤니케이션 관련 프로그램을 구축 할 때 Socket Extension은 개발자에게 강력한 기능을 제공합니다. socket_create () , socket_bind () , socket_listen () 및 socket_accept ()를 사용하여 기본 서버 예제를 작성하는 방법을 배울 때 오류 처리 메커니즘을 이해하는 것이 특히 중요합니다. 이 기사는 튜토리얼에서 Socket_clear_Error () 함수를 잘못 판단 오류와 논리적 혼란을 피하기 위해 올바르게 사용하는 방법에 중점을 둡니다.
socket_clear_error () 함수의 함수는 이전 소켓 오류를 지우는 것 입니다. 이 기능은 선택적 매개 변수 $ 소켓 으로 전달 될 수 있으며, 전달하면 소켓의 오류를 지우십시오. 통과하지 않으면 글로벌 마지막 소켓 오류를 지우십시오 (일반적으로 가장 최근의 실패 소켓 작동으로 인한 오류).
socket_clear_error(resource $socket = null): void
값을 반환하지 않으며 실패시 오류가 발생하지 않습니다. 이것은 당신이 그것을주의해서 사용하고 그것이 지우는 오류의 범위와 컨텍스트에 대해 명확해야한다는 것을 의미합니다.
가장 기본적인 소켓 서버를 구축하고 socket_clear_error () 를 사용하는 것을 보여 드리겠습니다.
<?php
$host = '0.0.0.0';
$port = 8888;
// 만들다 socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("Socket 만들다失败: " . socket_strerror(socket_last_error()) . "\n");
}
// 잔류 오류를 지우십시오,우리가 깨끗해지기 시작하는지 확인하십시오
socket_clear_error($socket);
// 묶다 socket 주소로 이동하십시오
if (!socket_bind($socket, $host, $port)) {
die("Socket 묶다失败: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// 연결을 듣기 시작하십시오
if (!socket_listen($socket)) {
die("Socket 듣기 실패: " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "서버가 시작되었습니다,포트를 들어보세요 {$port}...\n";
do {
$client = @socket_accept($socket);
if ($client === false) {
$error = socket_last_error($socket);
if ($error !== SOCKET_EAGAIN && $error !== SOCKET_EWOULDBLOCK) {
echo "연결을 수락하지 못했습니다: " . socket_strerror($error) . "\n";
}
socket_clear_error($socket); // 명확한 오류,다음주기를 방해하지 마십시오
continue;
}
$msg = "오신 것을 환영합니다 m66.net 테스트 서버!\n";
socket_write($client, $msg, strlen($msg));
socket_close($client);
} while (true);
socket_close($socket);
루프 구조에서 사용 : Socket_Accept () , Socket_read () 및 기타 작업을 잠시 동안 또는 연결에 지속적 으로 청취하는 구조를 처리 할 때, 호출이 실패하면 오류 메시지를 처리 한 후 즉시 호출을 호출하여 다음 호출 이 이전 오류를 허위로보고하지 않도록 오류 메시지를 처리 한 후 즉시 호출해야합니다.
잘못 판단 오류 상태를 피하십시오 . 지우지 않으면 로그 또는 오류 처리 로직에서 오래된 오류 메시지가 반복적으로 출력 될 수 있습니다.
socket_strerror ()와 함께 사용 : socket_last_error ()는 오류 코드를 반환하지만 socket_strerror ()를 사용하여 의미있는 정보 만 얻을 수 있습니다.
클리어런스를 남용하지 마십시오 . 실제 오류가 처리되지 않기 전에 socket_clear_error ()를 호출하지 마십시오. "오류를 제거"하는 것은 바로 가기가 아니라 오류가 처리되었음을 알면 상태를 지우는 도구입니다.
소켓 자습서를 구축 할 때는 Socket_clear_error () 가 간단한 기능이지만 오류 처리 메커니즘에서의 역할은 매우 중요합니다. 합리적으로 사용하면 소켓 서비스가 더욱 강력 해지고 오류 오염 및 논리적 잘못 판단을 피할 수 있습니다. 기억하십시오 : 오류를 지울 때의 오류를 지우고 그것을 지우지 않아야 할 때 맹목적으로 부르지 마십시오.