[dmd-concurrency] Shutdown protocol
Sean Kelly
sean at invisibleduck.org
Thu Jan 21 12:08:53 PST 2010
On Jan 21, 2010, at 10:28 AM, Steve Schveighoffer wrote:
>
> Note that it's not about a few seconds: socket streams are obstinate as a mule. They'll wait for 60-90 seconds to terminate if the connection is infinitely slow.
Yeah, if you want to be sure the system terminates promptly then you can't always count on a clean teardown. For example, here's the dtor for an IOCP connection I wrote back in the 90s:
cp_connection::~cp_connection()
{
close();
for( uint ticks = 0;
( !HasOverlappedIoCompleted( &m_ol_send ) || !HasOverlappedIoCompleted( &m_ol_recv ) ) && ticks < 1000;
++ticks )
{
::Sleep( 10 );
}
}
Pretty nasty, but I never actually had the dtor fall through the wait loop in production.
More information about the dmd-concurrency
mailing list