blob: 00a6fb9de0e03caedb5890ca0b88d4231e3e16d8 [file] [log] [blame]
Roger Meier21c0a852012-09-05 19:47:14 +00001<?php
2
3namespace Thrift\Server;
4
5use Thrift\Server\TServerTransport;
6use Thrift\Transport\TSocket;
7
8/**
9 * Socket implementation of a server agent.
10 *
11 * @package thrift.transport
12 */
13class TServerSocket extends TServerTransport {
14
15 /**
16 * Handle for the listener socket
17 *
18 * @var resource
19 */
20 private $listener_;
21
22 /**
23 * Port for the listener to listen on
24 *
25 * @var int
26 */
27 private $port_;
28
29 /**
30 * Timeout when listening for a new client
31 *
32 * @var int
33 */
34 private $acceptTimeout_ = 30000;
35
36 /**
37 * Host to listen on
38 *
39 * @var string
40 */
41 private $host_;
42
43 /**
44 * ServerSocket constructor
45 *
46 * @param string $host Host to listen on
47 * @param int $port Port to listen on
48 * @return void
49 */
50 public function __construct($host = 'localhost', $port = 9090) {
51 $this->host_ = $host;
52 $this->port_ = $port;
53 }
54
55 /**
56 * Sets the accept timeout
57 *
58 * @param int $acceptTimeout
59 * @return void
60 */
61 public function setAcceptTimeout($acceptTimeout) {
62 $this->acceptTimeout_ = $acceptTimeout;
63 }
64
65 /**
66 * Opens a new socket server handle
67 *
68 * @return void
69 */
70 public function listen() {
71 $this->listener_ = stream_socket_server('tcp://' . $this->host_ . ':' . $this->port_);
72 }
73
74 /**
75 * Closes the socket server handle
76 *
77 * @return void
78 */
79 public function close() {
80 @fclose($this->listener_);
81 $this->listener_ = null;
82 }
83
84 /**
85 * Implementation of accept. If not client is accepted in the given time
86 *
87 * @return TSocket
88 */
89 protected function acceptImpl() {
90 $handle = @stream_socket_accept($this->listener_, $this->acceptTimeout_ / 1000.0);
91 if(!$handle) return null;
92
93 $socket = new TSocket();
94 $socket->setHandle($handle);
95
96 return $socket;
97 }
98}