Boost logo

Boost Users :

From: Dominique Devienne (ddevienne_at_[hidden])
Date: 2020-12-14 18:27:23


(Sorry, incomplete email; CTRL+Return didn't do what I was expecting...)

On Mon, Dec 14, 2020 at 7:10 PM Dominique Devienne <ddevienne_at_[hidden]>
wrote:

> On Wed, Nov 25, 2020 at 6:46 PM Niall Douglas via Boost-users <
> boost-users_at_[hidden]> wrote:
>
>> On 25/11/2020 10:54, Dominique Devienne via Boost-users wrote:
>> > When I log the time it takes to resolve the server address and connect
>> > to it, then issue my HTTP request, it takes over 1 second (Win10,
>> > VS2019, C++17, Release, localhost for both client and server):
>> > 2020-11-25T09:46:38.506180 Connected in 1.023s
>> >
>> > While the same on Linux (RH7.5) is just over 2ms:
>> > 2020-11-25T09:45:45.517550 Connected in 0.000s
>> >
>> > That's a huge difference! Almost 500x...
>>
>> I can confirm that from libcurl wrapping ASIO, initiating a new HTTPS
>> connection takes almost the same time whether from Linux or Windows.
>>
>
I finally figured this out, mostly by chance...

As the extract below shows, Beast's example uses
tcp::endpoint{net::ip::make_address("0.0.0.0"), port}
in its sample usage, and I had copy/pasted that in my code (using
"0.0.0.0"). This works, in that the server
starts fine, and clients work fine too, but leads to those > 1,000ms client
connection times on Windows.
While using e.g. tcp::endpoint{ tcp::v6(), port } results in 20-30ms
connection times on Windows. (2-3ms on Linux).

So user error again. But maybe that usage example should use something else?
I guess taking an explicit IP is in case the server has multiple network
interfaces / IPs?
Not sure what could replace it, to save the next poor soul from making the
same mistake I did. --DD

PS: Niall, I've still seeing 10x between Win10 and RH7, but that's better
than 500x, and that's w/o SSL.
  Even with the server on Win10, and the client on Linux, it's still 3ms.
So it's the Win10 client that's slow somehow I guess.

> int main(int argc, char* argv[])
> {
> // Check command line arguments.
> if (argc != 5)
> {
> std::cerr << [...]
> " http-server-async 0.0.0.0 8080 . 1\n";
> return EXIT_FAILURE;
> }
> auto const address = net::ip::make_address(argv[1]);
> [...]
> net::io_context ioc{threads};
>
> // Create and launch a listening port
> std::make_shared<listener>(
> ioc,
> tcp::endpoint{address, port},
> doc_root)->run();
> [...]
> return EXIT_SUCCESS;
> }
>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net