Toolbox snapshot
The Reactive C++ Toolbox
Loading...
Searching...
No Matches
Resolver.cpp
Go to the documentation of this file.
1// The Reactive C++ Toolbox.
2// Copyright (C) 2013-2019 Swirly Cloud Limited
3// Copyright (C) 2021 Reactive Markets Limited
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17#include "Resolver.hpp"
18
20
21namespace toolbox {
22inline namespace net {
23
25{
26 return tq_.run([](Task&& t) { t(); });
27}
28
30{
31 tq_.stop();
32}
33
35{
36 // This will unblock waiters by throwing a "broken promise" exception.
37 return tq_.clear();
38}
39
40AddrInfoFuture Resolver::resolve(std::string uri, int type)
41{
42 Task task{[uri = std::move(uri), type]() -> AddrInfoPtr { return parse_endpoint(uri, type); }};
43 auto future = task.get_future();
44 tq_.push(std::move(task));
45 return future;
46}
47
48} // namespace net
49} // namespace toolbox
void clear()
Clear task queue. Any pending tasks will be cancelled, resulting in a broken promise.
Definition Resolver.cpp:34
void stop()
Interrupt and exit any inprogress call to run().
Definition Resolver.cpp:29
AddrInfoFuture resolve(std::string uri, int type)
Schedule a URI socket name resolution.
Definition Resolver.cpp:40
AddrInfoPtr parse_endpoint(string_view uri, int type)
Definition Endpoint.cpp:59
std::unique_ptr< addrinfo, void(*)(addrinfo *)> AddrInfoPtr
Definition Socket.hpp:30
std::future< AddrInfoPtr > AddrInfoFuture
Definition Resolver.hpp:30
constexpr auto bind() noexcept
Definition Slot.hpp:92