Re: [boost] [asio-users] Cancelation not working on windows?

This is my second attempt, since there was no meaningful answer on the first. I again apologize for cross-posting but I still have no idea which is the correct list to post asio related questions. Roland Schwarz wrote:
One of my objectives is getting cancellation in a platform independent way. Since on windows blocking io cannot be canceled I tried to use asio to emulate the required behavior.
This works well on linux, but the same code fails on windows. During a debug session it appeared to me as if the CancelIO call is not being honored (WindowsXP).
Is this a bug in asio or am I doing something wrong.
I put together a stripped down example to show the "erroneous" behavior.
The examples main thread connects to localhost port 80 and then schedules an async read call.
A second polling thread checks for ctrl-c beeing pressed and invokes the sockets cancel function.
On linux this causes the read handler to terminate with Oeration Cancelled as expected, but on windows the cancel request is simply swallowed.
Any help appreciated!
-- _________________________________________ _ _ | Roland Schwarz |_)(_ | aka. speedsnail | \__) | mailto:roland.schwarz@chello.at ________| http://www.blackspace.at # $Id: Jamroot 49 2008-01-08 14:20:45Z rs $ project cancel ; #use-project boost : "C:/projects/boost/trunk" ; use-project boost : /home/roland/projects/boost/trunk ; lib winsock : : <name>ws2_32 ; lib mswsock : : <name>mswsock ; exe cancel : cancel.cpp : <link>static <threading>multi <target-os>windows:<library>winsock <target-os>windows:<library>mswsock <target-os>windows:<define>_WIN32_WINNT=0x0500 <library>/boost//system <library>/boost//regex <library>/boost//date_time <library>/boost//thread ; install dist : cancel : <location>. ;

I'm going to go out on a limb here, because I don't have asio's source to hand, but... CancelIo (per <<http://msdn2.microsoft.com/en-us/library/aa363791(VS.85).aspx>> cancels "all pending input and output (I/O) operations that are issued by the calling thread for the specified file." Since you're cancelling on a different thread, I assume asio calls CancelIo on that thread and thus doesn't cancel the operation. See Larry Osterman's blog <<http://blogs.msdn.com/larryosterman/archive/2004/03/19/92857.aspx>> for background. Vista offers CancelIoEx and CancelSynchronousIo for these situations, but on previous versions of Windows there's no way to cancel I/O going on in a different thread. David -----Original Message----- From: Roland Schwarz [mailto:roland.schwarz@chello.at] Sent: Monday, 4 February 2008 7:46 AM To: asio-users@lists.sourceforge.net; boost@lists.boost.org; Christopher Kohlhoff Subject: Re: [boost] [asio-users] Cancelation not working on windows? This is my second attempt, since there was no meaningful answer on the first. I again apologize for cross-posting but I still have no idea which is the correct list to post asio related questions. Roland Schwarz wrote:
One of my objectives is getting cancellation in a platform independent way. Since on windows blocking io cannot be canceled I tried to use asio to emulate the required behavior.
This works well on linux, but the same code fails on windows. During a debug session it appeared to me as if the CancelIO call is not being honored (WindowsXP).
Is this a bug in asio or am I doing something wrong.
I put together a stripped down example to show the "erroneous" behavior.
The examples main thread connects to localhost port 80 and then schedules an async read call.
A second polling thread checks for ctrl-c beeing pressed and invokes the sockets cancel function.
On linux this causes the read handler to terminate with Oeration Cancelled as expected, but on windows the cancel request is simply swallowed.
Any help appreciated!
-- _________________________________________ _ _ | Roland Schwarz |_)(_ | aka. speedsnail | \__) | mailto:roland.schwarz@chello.at ________| http://www.blackspace.at This e-mail and any attachment is for authorised use by the intended recipient(s) only. It may contain proprietary material, confidential information and/or be subject to legal privilege. It should not be copied, disclosed to, retained or used by, any other party. If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender. Thank you.

Roland Schwarz wrote:
This is my second attempt, since there was no meaningful answer on the first.
My apologies. Due to work pressures the time I have to spend on asio has been rather limited.
I again apologize for cross-posting but I still have no idea which is the correct list to post asio related questions.
The asio-users is probably best since, as you discovered, the higher density of asio users there means others may be able to answer your question. I'll post followups there. Cheers, Chris
participants (3)
-
Christopher Kohlhoff
-
McCabe, David
-
Roland Schwarz