Skip to content

Commit 91c14fb

Browse files
committed
Merge branch 'dev'
2 parents cf8f0d7 + ae765f2 commit 91c14fb

File tree

2 files changed

+45
-14
lines changed

2 files changed

+45
-14
lines changed

src/Metrics.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,11 +254,18 @@ namespace vix::websocket
254254
}
255255
catch (const std::exception &e)
256256
{
257+
if (!listener || !listener->is_open())
258+
{
259+
break;
260+
}
261+
257262
log.log(vix::utils::Logger::Level::Debug,
258263
"[ws] metrics accept error ({})",
259264
e.what());
260265
}
261266
}
267+
268+
co_return;
262269
}
263270

264271
} // namespace
@@ -334,8 +341,7 @@ namespace vix::websocket
334341
ep.host = address;
335342
ep.port = port;
336343

337-
auto listen_task = listener->async_listen(ep);
338-
std::move(listen_task).start(ioc->get_scheduler());
344+
listener->listen(ep);
339345

340346
log.log(vix::utils::Logger::Level::Info,
341347
"[ws] metrics listening {}:{} (GET /metrics)",

src/websocket.cpp

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <cstddef>
1919
#include <memory>
2020
#include <stdexcept>
21+
#include <system_error>
2122
#include <thread>
2223
#include <utility>
2324

@@ -145,8 +146,7 @@ namespace vix::websocket
145146
endpoint.host = coreConfig_.getString("websocket.host", "0.0.0.0");
146147
endpoint.port = port;
147148

148-
auto listen_task = listener_->async_listen(endpoint);
149-
std::move(listen_task).start(ioContext_->get_scheduler());
149+
listener_->listen(endpoint);
150150

151151
boundPort_.store(static_cast<int>(port), std::memory_order_relaxed);
152152
}
@@ -165,8 +165,8 @@ namespace vix::websocket
165165
init_logger_from_env_once();
166166
vix::utils::console_wait_banner();
167167

168-
start_accept();
169168
start_io_threads();
169+
start_accept();
170170
}
171171

172172
void LowLevelServer::start_accept()
@@ -176,51 +176,76 @@ namespace vix::websocket
176176
return;
177177
}
178178

179+
if (!listener_ || !listener_->is_open())
180+
{
181+
throw std::runtime_error("websocket listener is not open");
182+
}
183+
179184
if (!logged_listen_.exchange(true, std::memory_order_acq_rel))
180185
{
181186
logger().log(Logger::Level::Info,
182187
"[ws] listening on {}:{}",
183188
coreConfig_.getString("websocket.host", "0.0.0.0"),
184189
boundPort_.load(std::memory_order_relaxed));
185-
}
186190

187-
spawn_detached(*ioContext_, accept_loop());
191+
spawn_detached(*ioContext_, accept_loop());
192+
}
188193
}
189194

190195
vix::async::core::task<void> LowLevelServer::accept_loop()
191196
{
192197
while (!stopRequested_.load(std::memory_order_acquire))
193198
{
199+
if (!listener_ || !listener_->is_open())
200+
{
201+
break;
202+
}
203+
194204
try
195205
{
196206
auto stream = co_await listener_->async_accept();
197207

198208
if (!stream)
199209
{
210+
if (stopRequested_.load(std::memory_order_acquire) ||
211+
!listener_ || !listener_->is_open())
212+
{
213+
break;
214+
}
215+
200216
continue;
201217
}
202218

203219
if (stopRequested_.load(std::memory_order_acquire))
204220
{
205221
close_stream(std::move(stream));
206-
co_return;
222+
break;
207223
}
208224

209225
spawn_detached(*ioContext_, handle_client(std::move(stream)));
210226
}
211227
catch (const std::exception &e)
212228
{
213-
if (!stopRequested_.load(std::memory_order_acquire))
229+
if (stopRequested_.load(std::memory_order_acquire) ||
230+
!listener_ || !listener_->is_open())
214231
{
215-
logger().log(Logger::Level::Debug,
216-
"[ws] accept error ({})",
217-
e.what());
232+
break;
218233
}
219234

220-
if (stopRequested_.load(std::memory_order_acquire))
235+
const auto *se = dynamic_cast<const std::system_error *>(&e);
236+
if (se)
221237
{
222-
break;
238+
const auto code = se->code();
239+
if (code == std::errc::operation_canceled ||
240+
code == std::errc::bad_file_descriptor)
241+
{
242+
break;
243+
}
223244
}
245+
246+
logger().log(Logger::Level::Debug,
247+
"[ws] accept error ({})",
248+
e.what());
224249
}
225250
}
226251

0 commit comments

Comments
 (0)