Skip to content

Instantly share code, notes, and snippets.

@necromant2005
Created February 27, 2016 16:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save necromant2005/90925099c7b1115bd4c3 to your computer and use it in GitHub Desktop.
Save necromant2005/90925099c7b1115bd4c3 to your computer and use it in GitHub Desktop.
<?php
// async php client
$request = '';
$request .= "GET / HTTP/1.1\r\n";
$request .= "Host: google.com\r\n";
$request .= "Connection: Close\r\n\r\n";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_nonblock($socket);
$waited = 0;
$timeout = 1000;
while (true) {
@socket_connect($socket, 'google.com', 80);
$error = socket_last_error();
//echo $error . '=>' . socket_strerror($error) . PHP_EOL;
if ($error == SOCKET_EINPROGRESS || $error == SOCKET_EALREADY) {
usleep(5);
$waited += 5;
if ($waited > $timeout) {
throw new RuntimeException('Timeout reached , waited ' . $waited . 'ms');
}
continue;
}
if ($error == SOCKET_EISCONN) {
echo 'connected after ' . $waited . 'ms' . PHP_EOL;
break;
}
throw new RuntimeException('unknown error ' . $error . ':' . socket_strerror($error));
}
socket_write($socket, $request);
socket_close($socket);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment