Boost logo

Boost Users :

Subject: Re: [Boost-users] [Asio]Question about error_code when socket::close
From: öÎì¿ÁÎ (cometliao_at_[hidden])
Date: 2010-05-16 06:00:32


Igor R <boost.lists <at> gmail.com> writes:

>
> > I want to distinguish the error_code set by calling socket::close from
any other ways (like system error, network
> > error, etc), otherwise, I can't determine whether I should delete the
object in async handlers, because
> some have already been deleted after I call socket::close. If
boost::asio::error::operation_aborted
> definitely means "socket::close is called", I can distinguish this
situation.
>
> It seems to be rather error-prone approach. One day, when your
> application will have grown a bit, you'll find yourself hunting weird
> segfaults / access-violations.
>

But when should I delete the object after I call socket::close? May be
there's no async handler, so just deleting object in handlers leads to
memory leak.

> > I've tried using boost::weak_ptr with boost::bind,but the performance
decrease dramatically.
>
> Did you run a performance profiler with fully-optimized application
> and really discovered that the bottle-neck is in shared_ptr's?! This
> would be really surprising...
>

I've tested it separately, when binding a weak_ptr/shared_ptr with a member
function, it will cause extra new/delete operations, but raw pointer will
not(gcc 4.4.1, boost 1.4.3).The former way is about 20 times slower,as a
frequently operation, it seems not acceptable.



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