<?php namespace App\Classes\Sock; // @todo Can we change this to use socket_strerr() && socket_last_error() final class SocketException extends \Exception { public const CANT_CREATE_SOCKET = 1; public const CANT_BIND_SOCKET = 2; public const CANT_LISTEN = 3; public const CANT_ACCEPT = 4; public const CANT_CONNECT = 5; public const SOCKET_ERROR = 6; public const SOCKET_EAGAIN = 11; public const SOCKET_READ = 22; public const CONNECTION_RESET = 104; private array $messages = [ self::CANT_CREATE_SOCKET => 'Can\'t create socket: "%s"', self::CANT_BIND_SOCKET => 'Can\'t bind socket: "%s"', self::CANT_LISTEN => 'Can\'t listen: "%s"', self::CANT_ACCEPT => 'Can\'t accept connections: "%s"', self::CANT_CONNECT => 'Can\'t connect: "%s"', self::SOCKET_ERROR => 'Socket Error: "%s"', self::SOCKET_EAGAIN => 'Socket Resource Temporarily Unavailable - Try again', self::SOCKET_READ => 'Unable to read from socket', self::CONNECTION_RESET => 'Connection reset by peer', ]; public function __construct(int $code,string $params=NULL) { $message = $params ? call_user_func_array('sprintf',[$this->messages[$code],$params]) : $this->messages[$code]; parent::__construct($message,$code); } }