php-school / learn-you-php

🏆 Learn You PHP! - An introduction to PHP's core features: i/o, http, arrays, exceptions and so on.

Home Page:http://www.phpschool.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Uncaught Hoa\Socket\Client::_open(): (1) Client returns an error (number 111)

michaellenahan opened this issue · comments

On the time-server exercise, I get the following error when running:

$ learnyouphp verify time.php

time.php is the solution code from here: https://raw.githubusercontent.com/php-school/learn-you-php/master/exercises/time-server/solution/solution.php

PHP Fatal error:  Uncaught Hoa\Socket\Client::_open(): (1) Client returns an error (number 111): Connection refused while trying to join tcp://127.0.0.1:55019.
in /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/socket/Client.php at line 191.
  thrown in /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/socket/Client.php on line 191

Fatal error: Uncaught Hoa\Socket\Client::_open(): (1) Client returns an error (number 111): Connection refused while trying to join tcp://127.0.0.1:55019.
in /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/socket/Client.php at line 191.
  thrown in /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/socket/Client.php on line 191

Hoa\Socket\Exception\Exception: Client returns an error (number 111): Connection refused while trying to join tcp://127.0.0.1:55019. in /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/socket/Client.php on line 191

Call Stack:
    0.0002     360312   1. {main}() /home/michael/.php-school/workshops/learnyouphp/bin/learnyouphp:0
    0.0042     910536   2. PhpSchool\PhpWorkshop\Application->run() /home/michael/.php-school/workshops/learnyouphp/bin/learnyouphp:5
    0.0291    3934080   3. PhpSchool\PhpWorkshop\CommandRouter->route() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/Application.php:194
    0.0529    6942160   4. PhpSchool\PhpWorkshop\CommandRouter->resolveCallable() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/CommandRouter.php:131
    0.0668    7771184   5. PhpSchool\PhpWorkshop\CommandRouter->callCommand() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/CommandRouter.php:213
    0.0668    7771184   6. PhpSchool\PhpWorkshop\Command\VerifyCommand->__invoke() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/CommandRouter.php:233
    0.0668    7771184   7. PhpSchool\PhpWorkshop\ExerciseDispatcher->verify() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/Command/VerifyCommand.php:83
    0.1019    8329080   8. PhpSchool\PhpWorkshop\ExerciseRunner\CliRunner->verify() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/ExerciseDispatcher.php:156
    0.1095    8369832   9. array_map() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/ExerciseRunner/CliRunner.php:143
    0.1095    8369888  10. PhpSchool\PhpWorkshop\ExerciseRunner\CliRunner->PhpSchool\PhpWorkshop\ExerciseRunner\{closure}() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/ExerciseRunner/CliRunner.php:143
    0.1095    8369888  11. PhpSchool\PhpWorkshop\ExerciseRunner\CliRunner->doVerify() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/ExerciseRunner/CliRunner.php:141
    0.1097    8376584  12. PhpSchool\PhpWorkshop\ExerciseRunner\CliRunner->executePhpFile() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/ExerciseRunner/CliRunner.php:182
    0.1107    8383304  13. PhpSchool\PhpWorkshop\Event\EventDispatcher->dispatch() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/ExerciseRunner/CliRunner.php:97
    0.1107    8383304  14. PhpSchool\LearnYouPhp\Exercise\TimeServer->PhpSchool\LearnYouPhp\Exercise\{closure}() /home/michael/.php-school/workshops/learnyouphp/vendor/php-school/php-workshop/src/Event/EventDispatcher.php:44
    0.2144    8735696  15. Hoa\Socket\Client->connect() /home/michael/.php-school/workshops/learnyouphp/src/Exercise/TimeServer.php:80
    0.2145    8735744  16. Hoa\Socket\Client->__construct() /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/socket/Connection/Connection.php:197
    0.2150    8748304  17. Hoa\Socket\Client->open() /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/stream/Stream.php:172
    0.2150    8748304  18. Hoa\Stream\Stream::_getStream() /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/stream/Stream.php:290
    0.2151    8748744  19. Hoa\Socket\Client->_open() /home/michael/.php-school/workshops/learnyouphp/vendor/hoa/stream/Stream.php:213

Just tried locally and it works fine for me. Does it happen every time? I seem to recall there being some race conditions after opening the socket. Maybe you can try increasing https://github.com/php-school/learn-you-php/blob/master/src/Exercise/TimeServer.php#L78 to see if it fixes? Other than that I'm not really sure :/

We can definitely improve the experience by catching the exception and give a nicer error message. We could also retry on a different port if it fails the first time.

Thanks for responding!

"Does it happen every time?" Yes. I haven't tried it on another machine yet, I guess it must be something locally.

I have increased https://github.com/php-school/learn-you-php/blob/master/src/Exercise/TimeServer.php#L78 to 1000000, but that did not help.