Boost logo

Boost Users :

Subject: Re: [Boost-users] [asio] SSL async_shutdown() never finishes if called when async_read_some() is in progress
From: Alexander D. (alexdems_at_[hidden])
Date: 2018-04-06 14:29:45


On April 6, 2018 9:55 PM, Vinnie Falco via Boost-users <boost-users_at_[hidden]> wrote:
> On Fri, Apr 6, 2018 at 6:11 AM, Alexander D. via Boost-users
> <boost-users_at_[hidden]> wrote:
>>>> The only solution I can think of would be to cancel the read operation, but there's no portable way in asio to do this.
>>>
>>> sock.next_layer().cancel();
>>>
>>> ?
>>
>> Per ASIO Reference:
>>
>> "Calls to cancel() will always fail with boost::asio::error::operation_not_supported when run on Windows XP, Windows Server 2003, and earlier versions of Windows, unless BOOST_ASIO_ENABLE_CANCELIO is defined. However, the CancelIo function has two issues that should be considered before enabling its use:
>> ..."
>>
>> which renders cancel() non-portable.
>
> I consider the issues with cancel present in Windows XP and Windows
> Server 2003 to be sufficiently problematic that it is not worth taking
> them into account when designing robust network applications (I do
> develop mostly on Windows). Unless you have a specific business need
> to support those defective operating systems, I would just ignore
> them.

Yes, I do need the program to work on at least Windows XP.

However, even if cancel() is used, it is a workaround, not a solution. If you run the code I supplied, you'll notice that async_read_some() is actually finished with a "stream truncated" error, quite similar to "canceling" the read. The problem is on async_shutdown()'s handler not being called, and it's not mentioned anywhere in the reference. Why can't we shutdown a stream while reading from it (since we can close a socket while reading)?


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