blob: 00a6fb9de0e03caedb5890ca0b88d4231e3e16d8 [file] [log] [blame]
<?php
namespace Thrift\Server;
use Thrift\Server\TServerTransport;
use Thrift\Transport\TSocket;
/**
* Socket implementation of a server agent.
*
* @package thrift.transport
*/
class TServerSocket extends TServerTransport {
/**
* Handle for the listener socket
*
* @var resource
*/
private $listener_;
/**
* Port for the listener to listen on
*
* @var int
*/
private $port_;
/**
* Timeout when listening for a new client
*
* @var int
*/
private $acceptTimeout_ = 30000;
/**
* Host to listen on
*
* @var string
*/
private $host_;
/**
* ServerSocket constructor
*
* @param string $host Host to listen on
* @param int $port Port to listen on
* @return void
*/
public function __construct($host = 'localhost', $port = 9090) {
$this->host_ = $host;
$this->port_ = $port;
}
/**
* Sets the accept timeout
*
* @param int $acceptTimeout
* @return void
*/
public function setAcceptTimeout($acceptTimeout) {
$this->acceptTimeout_ = $acceptTimeout;
}
/**
* Opens a new socket server handle
*
* @return void
*/
public function listen() {
$this->listener_ = stream_socket_server('tcp://' . $this->host_ . ':' . $this->port_);
}
/**
* Closes the socket server handle
*
* @return void
*/
public function close() {
@fclose($this->listener_);
$this->listener_ = null;
}
/**
* Implementation of accept. If not client is accepted in the given time
*
* @return TSocket
*/
protected function acceptImpl() {
$handle = @stream_socket_accept($this->listener_, $this->acceptTimeout_ / 1000.0);
if(!$handle) return null;
$socket = new TSocket();
$socket->setHandle($handle);
return $socket;
}
}