PHP에서 네트워크를 프로그래밍 할 때 Socket_last_error () 및 Socket_clear_Error () 는 주로 소켓 연결에서 오류 정보를 관리하고 처리하는 데 사용되는 두 가지 매우 중요한 기능입니다. 이 두 기능을 올바르게 사용하면 개발자가 오류를보다 효율적으로 잡고 처리하고 프로그램의 견고성을 향상시키는 데 도움이 될 수 있습니다. 이 기사는이 두 기능의 기능과 올바른 사용법을 자세히 설명하고 샘플 코드를 통해 이해를 심화시킵니다.
socket_last_error (Resource $ socket = null) : int
이 기능은 지정된 소켓 연결에 대한 마지막 오류 코드를 얻는 데 사용됩니다. 소켓 매개 변수가 전달되지 않으면 글로벌 마지막 오류 코드가 반환됩니다. 이 오류 코드는 다른 오류 유형을 나타내는 정수입니다.
socket_clear_error (Resource $ socket = null) : void
이 기능은 지정된 소켓 연결에서 오류 상태를 지우는 데 사용됩니다. 소켓 매개 변수가 전달되지 않으면 글로벌 오류 상태가 지워집니다. 오류를 지우면 socket_last_error ()를 다시 호출하면 0이 반환되므로 오류가 없음을 나타냅니다.
소켓 작동을 수행 할 때 오류 메시지는 소켓의 오류 상태에 보관됩니다. 시간이 지남에 따라 지우지 않으면 Socket_last_error () 에 대한 후속 호출은 이전 오류를 계속 반환하여 새 오류와 이전 오류를 구별 할 수 없습니다.
따라서 권장되는 접근법은 다음과 같습니다.
첫 번째 호출 socket_last_error ()를 호출하여 현재 오류 상태를 얻습니다.
오류 코드에 따르면 해당 처리가 수행됩니다.
처리가 완료되면 Socket_Clear_Error () 호출을 통해 오류를 지우려면 후속 통화가 새 오류 상태를 정확하게 얻을 수 있는지 확인하십시오.
<?php
// a TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "만들다 socket 실패하다,오류 코드: " . socket_last_error() . "\n";
socket_clear_error(); // 명확한 글로벌 오류 상태
exit;
}
// 지정된 서버와 포트에 연결하십시오
$result = socket_connect($socket, 'm66.net', 80);
if ($result === false) {
$errorCode = socket_last_error($socket);
echo "连接실패하다,오류 코드: {$errorCode}\n";
// 根据오류 코드做不同处理,예를 들어 다시 시도하거나 로깅을 시도하십시오
// ...
socket_clear_error($socket); // 분명한 socket 오류 상태,후속 작업에 영향을 미치지 마십시오
} else {
echo "연결이 성공적으로 연결됩니다!\n";
}
// 폐쇄 socket
socket_close($socket);
?>
오류 상태는 소켓 자원에 바인딩되므로 글로벌 오류 상태, 특히 멀티 소켓 연결 시나리오에서 사용하지 않기 위해 호출 할 때 해당 소켓 리소스를 명시 적으로 전달하는 것이 가장 좋습니다.
오류 메시지를 반복적으로 읽고 판단 오류를 유발하지 않도록 오류 상태를 정시에 지우십시오 .
오류를 처리 한 후 상태를 지우지 않으면 Socket_last_error () 에 대한 후속 호출은 이전 오류 코드를 반환하여 프로그램 로직에 영향을 줄 수 있습니다.
socket_last_error ()를 사용하여 현재 소켓의 마지막 오류 코드를 얻으십시오.
오류를 처리 한 후 Socket_Clear_Error ()를 호출하여 오류 상태를 지우십시오.
혼동을 피하기 위해 특정 소켓 리소스를 통과시킵니다.
이 두 기능을 올바르게 사용하면 PHP 소켓 프로그래밍이 더욱 강력하고 디버그하기 쉬울 수 있습니다.