Gavin, thanks for your answer.

So the way to go is to copy the values of the iterator and cache these, that makes sense.

Have others had any experiences with this? I want to avoid making a DNS lookup every time I perform a (HTTP) request.

Also – and not strictly related to this question – why are DNS lookups in Boost Asio tied to a service, as in resolve(query(host, "http"))?

Thanks for any pointers, much appreciated.

Kaspar

On Tue, Dec 17, 2013 at 3:31 PM, Gavin Lambert <gavinl@compacsort.com> wrote:
On 18/12/2013 11:44, Quoth Kaspar Fischer:
Just to be on the safe side: I assume that I can cache the iterator
returned by async_resolve
<http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/reference/ip__basic_resolver/async_resolve/overload1.html>'s
handler, correct?

I'm not an expert, but I would be surprised if that were safe.  You should probably iterate it and save the resulting objects from within your handler only.


The fact that it's a forward iterator suggests so...

I don't know why you think that follows.  The iterator type just tells you what the interface is, not what the lifetime of the underlying collection is.

In this case, it's possible that the collection has the same lifetime as the socket, or of the iterators (which would make caching it somewhat safe) but I would think it far more likely that it has the lifetime of the resolve operation itself instead (which would make caching it unsafe, as it would be deleted as soon as the handler returns).


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users