네트워크 통신에 PHP의 소켓 확장을 사용하는 경우 개발자는 종종 연결 시간 초과, 실패 보내기 또는 불완전한 데이터 수신과 같은 다양한 오류가 발생합니다. 이러한 예외를 더 잘 제어하기 위해서는 일반적으로 오류 코드를 쿼리하고 처리하지만 때로는 오류 상태를 정리하는 것도 마찬가지로 중요합니다. Socket_clear_Error () 함수가 유용 할 때입니다.
Socket_clear_Error () 는 소켓의 마지막 오류 상태를 지우기 위해 PHP가 제공하는 소켓 확장 기능입니다. 이는 순환 통신 또는 동일한 소켓 인스턴스를 다중화하여 후속 작업을 방해하는 오래된 오류를 피하는 시나리오에서 특히 유용합니다.
구문은 다음과 같습니다.
socket_clear_error(?Socket $socket = null): void
이 기능에 대한 인수는 유효한 소켓 리소스 일 수 있습니다. 비어 있으면 모든 소켓에서 발생한 마지막 오류가 지워집니다.
원격 서버에 연결하고 데이터를 전송하며 응답을받는 사용자 정의 소켓 클래스 MySocketClient를 구축한다고 가정 해 봅시다. 실제로 사용하면 연결이 실패하면 재 연결을 시도하기 위해 오류 메시지를 정리하기를 희망합니다.
다음은 연결이 실패한 후 Socket_clear_Error ()를 사용하여 오류를 정리하는 방법을 보여주는 간단한 사용자 정의 클래스 예입니다.
class MySocketClient {
private $socket;
private $host;
private $port;
public function __construct($host = 'm66.net', $port = 80) {
$this->host = $host;
$this->port = $port;
}
public function connect() {
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$this->socket) {
throw new \Exception('만들다 socket 실패하다: ' . socket_strerror(socket_last_error()));
}
$result = @socket_connect($this->socket, $this->host, $this->port);
if (!$result) {
$errorCode = socket_last_error($this->socket);
$errorMsg = socket_strerror($errorCode);
// 명확한 오류
socket_clear_error($this->socket);
throw new \Exception("连接실패하다 ({$errorCode}): {$errorMsg}");
}
// 연결이 성공적으로 연결됩니다
return true;
}
public function send($data) {
if (!socket_write($this->socket, $data, strlen($data))) {
$errorMsg = socket_strerror(socket_last_error($this->socket));
socket_clear_error($this->socket);
throw new \Exception("发送数据실패하다: {$errorMsg}");
}
}
public function close() {
if ($this->socket) {
socket_close($this->socket);
}
}
}
위의 클래스를 사용하여 M66.net 의 포트 80에 연결하고 간단한 HTTP 요청을 보내십시오.