Skip to content

Commit 550c336

Browse files
authored
Merge pull request #226 from clue-labs/caching-dns
Default to using DNS cache (with max 256 entries) for Connector
2 parents 4fbe726 + c732009 commit 550c336

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

src/Connector.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function __construct(LoopInterface $loop, array $options = array())
6565
}
6666

6767
$factory = new DnsFactory();
68-
$resolver = $factory->create(
68+
$resolver = $factory->createCached(
6969
$server,
7070
$loop
7171
);

tests/FunctionalConnectorTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,42 @@ public function connectionToTcpServerShouldSucceedWithLocalhost()
3535
$server->close();
3636
}
3737

38+
/**
39+
* @group internet
40+
*/
41+
public function testConnectTwiceWithoutHappyEyeBallsOnlySendsSingleDnsQueryDueToLocalDnsCache()
42+
{
43+
$loop = Factory::create();
44+
45+
$socket = stream_socket_server('udp://127.0.0.1:0', $errno, $errstr, STREAM_SERVER_BIND);
46+
47+
$connector = new Connector($loop, array(
48+
'dns' => 'udp://' . stream_socket_get_name($socket, false),
49+
'happy_eyeballs' => false
50+
));
51+
52+
// minimal DNS proxy stub which forwards DNS messages to actual DNS server
53+
$received = 0;
54+
$loop->addReadStream($socket, function ($socket) use (&$received) {
55+
$request = stream_socket_recvfrom($socket, 65536, 0, $peer);
56+
57+
$client = stream_socket_client('udp://8.8.8.8:53');
58+
fwrite($client, $request);
59+
$response = fread($client, 65536);
60+
61+
stream_socket_sendto($socket, $response, 0, $peer);
62+
++$received;
63+
});
64+
65+
$connection = Block\await($connector->connect('example.com:80'), $loop);
66+
$connection->close();
67+
$this->assertEquals(1, $received);
68+
69+
$connection = Block\await($connector->connect('example.com:80'), $loop);
70+
$connection->close();
71+
$this->assertEquals(1, $received);
72+
}
73+
3874
/**
3975
* @test
4076
* @group internet

0 commit comments

Comments
 (0)