Example #1
0
 /**
  * @recoil-coroutine
  */
 private function connectSocket(ConnectionOptions $options) : Generator
 {
     $errorCode = null;
     $errorMessage = null;
     $stream = @stream_socket_client(\sprintf('tcp://%s:%s', $options->host(), $options->port()), $errorCode, $errorMessage, 0, STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT);
     if ($stream === false) {
         throw SingleConnectionException::couldNotConnect($options, $errorCode . ': ' . $errorMessage);
     }
     // Wait for the socket to open or fail ...
     stream_set_blocking($stream, false);
     list(, $writable) = (yield Recoil::select([$stream], [$stream]));
     if (empty($writable)) {
         throw SingleConnectionException::couldNotConnect($options, 'connection refused');
     }
     return $stream;
 }