57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | /* | ||
|  |  * This file is part of the Monolog package. | ||
|  |  * | ||
|  |  * (c) Jordi Boggiano <j.boggiano@seld.be> | ||
|  |  * | ||
|  |  * For the full copyright and license information, please view the LICENSE | ||
|  |  * file that was distributed with this source code. | ||
|  |  */ | ||
|  | 
 | ||
|  | namespace Monolog\Handler\SyslogUdp; | ||
|  | 
 | ||
|  | class UdpSocket | ||
|  | { | ||
|  |     const DATAGRAM_MAX_LENGTH = 65023; | ||
|  | 
 | ||
|  |     protected $ip; | ||
|  |     protected $port; | ||
|  |     protected $socket; | ||
|  | 
 | ||
|  |     public function __construct($ip, $port = 514) | ||
|  |     { | ||
|  |         $this->ip = $ip; | ||
|  |         $this->port = $port; | ||
|  |         $this->socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function write($line, $header = "") | ||
|  |     { | ||
|  |         $this->send($this->assembleMessage($line, $header)); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function close() | ||
|  |     { | ||
|  |         if (is_resource($this->socket)) { | ||
|  |             socket_close($this->socket); | ||
|  |             $this->socket = null; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     protected function send($chunk) | ||
|  |     { | ||
|  |         if (!is_resource($this->socket)) { | ||
|  |             throw new \LogicException('The UdpSocket to '.$this->ip.':'.$this->port.' has been closed and can not be written to anymore'); | ||
|  |         } | ||
|  |         socket_sendto($this->socket, $chunk, strlen($chunk), $flags = 0, $this->ip, $this->port); | ||
|  |     } | ||
|  | 
 | ||
|  |     protected function assembleMessage($line, $header) | ||
|  |     { | ||
|  |         $chunkSize = self::DATAGRAM_MAX_LENGTH - strlen($header); | ||
|  | 
 | ||
|  |         return $header . substr($line, 0, $chunkSize); | ||
|  |     } | ||
|  | } |