1 | <?php |
||
19 | class ServerSocket extends AbstractSocket |
||
20 | { |
||
21 | /** {@inheritdoc} */ |
||
22 | 4 | protected function createSocketResource($address, $context) |
|
23 | { |
||
24 | 4 | $type = $this->getSocketScheme($address); |
|
25 | 4 | $resource = stream_socket_server( |
|
26 | 4 | $address, |
|
27 | 4 | $errno, |
|
28 | 4 | $errstr, |
|
29 | 4 | $this->getServerFlagsByType($type), |
|
30 | $context |
||
31 | 4 | ); |
|
32 | |||
33 | 4 | if ($errno || $resource === false) { |
|
34 | 2 | throw new NetworkSocketException($this, $errstr, $errno); |
|
35 | } |
||
36 | |||
37 | 2 | return $resource; |
|
38 | } |
||
39 | |||
40 | /** |
||
41 | * Return socket scheme |
||
42 | * |
||
43 | * @param string $address Address in form scheme://host:port |
||
44 | * |
||
45 | * @return string|null |
||
46 | */ |
||
47 | 4 | private function getSocketScheme($address) |
|
48 | { |
||
49 | 4 | $pos = strpos($address, '://'); |
|
50 | 4 | if ($pos === false) { |
|
51 | 1 | return null; |
|
52 | } |
||
53 | |||
54 | 3 | return substr($address, 0, $pos); |
|
55 | } |
||
56 | |||
57 | /** |
||
58 | * Return flags for connection |
||
59 | * |
||
60 | * @param string $scheme Socket type being created |
||
61 | * |
||
62 | * @return int |
||
63 | */ |
||
64 | 4 | private function getServerFlagsByType($scheme) |
|
75 | |||
76 | /** {@inheritdoc} */ |
||
77 | 2 | protected function createIoInterface($type, $address) |
|
92 | } |
||
93 |