PHP 네트워크 프로그래밍에서 Socket_clear_error ()는 종종 시작하는 개발자에게 종종 오해 된 기능입니다. 많은 사람들이 Socket_clear_Error ()를 호출하면 소켓 상태를 "재설정"또는 "복원"하여 사용 가능한 상태로 돌아갈 수 있다고 잘못 생각합니다. 실제로이 기능의 기능은 이것과 매우 다릅니다.
socket_clear_error ()는 단순히 소켓 관련 오류 정보를 지우는 것입니다. 즉, 오류를 감지 할 때 후속 호출이 이전 오류 상태를 반환하지 않도록 오류 코드를 재설정합니다. 소켓 자체의 연결 상태 또는 자원 상태를 변경하지 않습니다.
다시 말해,이 기능은 "소켓 상태를위한 수리 도구"가 아닌 "오류 상태를위한 청소 도구"입니다.
<?php
// 만들다 TCP socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// 유효하지 않은 주소에 연결하십시오,오류가 필연적으로 발생합니다
socket_connect($sock, 'm66.net', 12345) or die("연결이 실패했습니다: " . socket_strerror(socket_last_error($sock)));
// 현재 socket_last_error($sock) 연결 오류 코드로 돌아갑니다
echo "오류 코드: " . socket_last_error($sock) . "\n";
// 부르다 socket_clear_error() 명확한 오류 메시지
socket_clear_error($sock);
// 现在再次获取오류 코드,돌아와야합니다0,오류가 없습니다
echo "清除错误后오류 코드: " . socket_last_error($sock) . "\n";
// 하지만 socket 연결 상태는 여전히 유효하지 않습니다,socket 여전히 잘못된 연결 상태에 있습니다,회복 할 수 없습니다
?>
위의 예에서는 socket_clear_error () 가 호출되고 오류 코드가 지워지지 만 소켓 자체의 연결 상태가 변경되지 않았으며 소켓이 "사용 가능한"상태로 돌아 오지 않았습니다.
오해 1 : socket_clear_error ()를 호출 한 후 소켓은 자동으로 정상으로 돌아갑니다 <br> 실제로 이것은 오류 코드를 지우고 연결을 재구성하거나 소켓 상태를 수리 할 수는 없습니다.
오해 2 :이 기능은 재생성 소켓을 대체 할 수 있습니다
소켓 오류가 발생하면 올바른 방법은 이전 소켓을 닫고 새로운 소켓 연결을 재현하는 것입니다.
오해 3 : socket_clear_error ()는 오류 처리 프로세스의 수리 단계에 사용됩니다 <br> 오류 코드를 정리하는 데만 사용되며, 이는 후속 오류 판단을 용이하게하고 복구 작업에 사용할 수 없습니다.
socket_clear_error () 는 오류 상태 코드를 지우는 도우미 함수이며 소켓 연결 상태를 복원하거나 재설정하는 기능이 없습니다. 초보자는이 문제에 대해 분명해야합니다. 사용할 때는 소켓 상태를 "고정"할 수 있다고 잘못 생각하지 마십시오. 소켓이 심각한 오류에 직면하면 올바른 접근 방식은 socket_clear_error () 에 의존하는 대신 연결을 닫고 다시 설정하는 것입니다.