mirror of
https://github.com/boostorg/beast.git
synced 2025-08-04 15:24:31 +02:00
committed by
Vinnie Falco
parent
dcc30bcc40
commit
26a156e300
@@ -5,6 +5,7 @@ Version 275:
|
|||||||
* Use automatically deduced return types for all async operations
|
* Use automatically deduced return types for all async operations
|
||||||
* Support Concepts for completion token params
|
* Support Concepts for completion token params
|
||||||
* https_get example sends the Host header
|
* https_get example sends the Host header
|
||||||
|
* Fix async_close error code when async_read times out
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -210,6 +210,14 @@ struct stream<NextLayer, deflateSupported>::impl_type
|
|||||||
timer.cancel();
|
timer.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
time_out()
|
||||||
|
{
|
||||||
|
timed_out = true;
|
||||||
|
change_status(status::closed);
|
||||||
|
close_socket(get_lowest_layer(stream()));
|
||||||
|
}
|
||||||
|
|
||||||
// Called just before sending
|
// Called just before sending
|
||||||
// the first frame of each message
|
// the first frame of each message
|
||||||
void
|
void
|
||||||
@@ -516,8 +524,7 @@ private:
|
|||||||
switch(impl.status_)
|
switch(impl.status_)
|
||||||
{
|
{
|
||||||
case status::handshake:
|
case status::handshake:
|
||||||
impl.timed_out = true;
|
impl.time_out();
|
||||||
close_socket(get_lowest_layer(impl.stream()));
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case status::open:
|
case status::open:
|
||||||
@@ -537,14 +544,11 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// timeout
|
impl.time_out();
|
||||||
impl.timed_out = true;
|
|
||||||
close_socket(get_lowest_layer(impl.stream()));
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case status::closing:
|
case status::closing:
|
||||||
impl.timed_out = true;
|
impl.time_out();
|
||||||
close_socket(get_lowest_layer(impl.stream()));
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case status::closed:
|
case status::closed:
|
||||||
|
@@ -155,11 +155,40 @@ struct timer_test : unit_test::suite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/boostorg/beast/issues/1729#issuecomment-540481056
|
||||||
|
void
|
||||||
|
testCloseWhileRead()
|
||||||
|
{
|
||||||
|
net::io_context ioc;
|
||||||
|
stream<tcp::socket> ws1(ioc);
|
||||||
|
stream<tcp::socket> ws2(ioc);
|
||||||
|
test::connect(ws1.next_layer(), ws2.next_layer());
|
||||||
|
|
||||||
|
ws1.set_option(websocket::stream_base::timeout{
|
||||||
|
std::chrono::milliseconds(50),
|
||||||
|
websocket::stream_base::none(),
|
||||||
|
false});
|
||||||
|
|
||||||
|
ws1.async_accept(net::detached);
|
||||||
|
ws2.async_handshake(
|
||||||
|
"localhost", "/", net::detached);
|
||||||
|
ioc.run();
|
||||||
|
ioc.restart();
|
||||||
|
|
||||||
|
flat_buffer b;
|
||||||
|
ws1.async_read(b, test::fail_handler(
|
||||||
|
beast::error::timeout));
|
||||||
|
ws1.async_close({}, test::fail_handler(
|
||||||
|
net::error::operation_aborted));
|
||||||
|
ioc.run();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
run() override
|
run() override
|
||||||
{
|
{
|
||||||
testIdlePing();
|
testIdlePing();
|
||||||
testIssue1729();
|
testIssue1729();
|
||||||
|
testCloseWhileRead();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user