public function connect($port, $host, $connectionListener) { $self = $this; $this->connection = uv_tcp_init(); $client = $this->connection; uv_tcp_connect($this->connection, uv_ip4_addr($host, $port), function ($stream, $stat) use($self, $connectionListener, &$client) { $self->setType("tcp4"); if ($stat == 0) { $self->emit("connect"); if (is_callable($connectionListener)) { $connectionListener(); } //start reading data from server... uv_read_start($client, function ($stream, $nread, $buffer) use($self) { if ($nread > 0) { //we got some data from server $self->emit('data', $buffer); } if ($self->shouldClose) { uv_close($stream); $self->emit('close'); } }); } }); return $this; }
/** * Connects a client to the socket * * @param ClientInterface $client * @param callable $callback * @return SocketInterface */ public function connect(ClientInterface $client, callable $callback) { $internalCallback = function ($resource, $status) use($callback, $client) { if (!$status) { $client->emit(new Event('error'), [$resource, new ConnectionError('Could not open connection.', $status)]); return; } $client->on(['data'], $callback); }; \uv_tcp_connect($client->getBackend(), $this->getBackend(), $internalCallback); return $this; }
<?php $tcp = uv_tcp_init(); uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0', 9999)); uv_listen($tcp, 100, function ($server) { $client = uv_tcp_init(); uv_accept($server, $client); var_dump(uv_tcp_getsockname($server)); uv_read_start($client, function ($socket, $nread, $buffer) use($server) { var_dump($buffer); uv_close($socket); uv_close($server); }); }); $c = uv_tcp_init(); uv_tcp_connect($c, uv_ip4_addr('0.0.0.0', 9999), function ($client, $stat) { if ($stat == 0) { uv_write($client, "Hello", function ($socket, $stat) { uv_close($socket); }); } }); uv_run();
$uv = uv_ares_init_options(uv_default_loop(), array("servers" => array("8.8.8.8"), "port" => 53), null); ares_gethostbyname($uv, $domain, AF_INET, function ($name, $addr) use($path, $host) { $a = array_shift($addr); $address = uv_ip4_addr($a, "80"); $tcp = uv_tcp_init(); uv_tcp_connect($tcp, $address, function ($client, $stat) use($path, $host) { var_dump(uv_tcp_getpeername($client)); $request = <<<EOF GET {$path} HTTP/1.0 Host: {$host} EOF; echo $request; var_dump($client); uv_write($client, $request, function ($client, $stat) { echo "write"; if ($stat == 0) { uv_read_start($client, function ($client, $nread, $buffer) { echo "\n1\n"; //var_dump($buffer); uv_close($client); }); } else { echo 2; uv_close($client); } }); }); }); uv_run();