У меня есть класс, который использует asio::generic::stream_protocol::socket
для подключения к домену (asio::local::stream_protocol::endpoint
) и сокетам TCP (asio::ip::tcp::endpoint
).Выполнение модульных тестов, по-видимому, блокирует io_service неопределенно
Для проверки этого класса у меня есть серия модульных тестов в одном файле с использованием рамки Catch.
У меня внезапно возникла проблема: при выполнении тестов они застрянут. Проходя -DASIO_ENABLE_HANDLER_TRACKING
к флагам компилятора, я вижу, что он застревает на async_connect
. Этого не происходит, если я прокомментирую все тесты, кроме одного, независимо от того, что. Если у меня есть два теста, независимо от того, подключены ли они к сокетам домена или tcp, или по одному из них, я получаю блокировку.
Выход изменений ASIO, но это пример:
$ tests/unit_tests
@asio|1478248907.3|0*1|[email protected]_wait
@asio|1478248907.301276|0*2|[email protected]_resolve
@asio|1478248907.301322|>1|ec=system:0
@asio|1478248907.301328|<1|
@asio|1478248907.302052|>2|ec=system:0,...
@asio|1478248907.302186|2*3|[email protected]_connect
@asio|1478248907.302302|<2|
@asio|1478248907.302468|>3|ec=system:0
@asio|1478248907.302481|<3|
@asio|1478248907.302551|0*4|[email protected]_send
@asio|1478248907.302611|>4|ec=system:0,bytes_transferred=23
@asio|1478248907.302617|<4|
@asio|1478248907.302621|0*5|[email protected]_receive(null_buffers)
@asio|1478248907.356478|>5|ec=system:0,bytes_transferred=0
@asio|1478248907.356547|<5|
@asio|1478248907.356622|0|[email protected]
@asio|1478248907.372967|0|[email protected]
@asio|1478248907.372981|0|[email protected]
@asio|1478248907.373509|0*6|[email protected]_wait
@asio|1478248907.373526|0*7|[email protected]_resolve
@asio|1478248907.374910|>7|ec=system:0,...
@asio|1478248907.374946|7*8|[email protected]_connect
@asio|1478248907.375014|<7|
@asio|1478248907.375127|>8|ec=system:0
@asio|1478248907.375135|<8|
Мой вопрос: в чем проблема с запуском модульных тестов, что открывать и закрывать соединение? Если это не-нет, как вы пишете модульные тесты, в которых используется async_open?
Можете ли вы предоставить [mcve]? Выход отслеживания обработчика показывает две операции 'async_connect' как завершающиеся с успехом. Если прикрепить отладчик, какова трассировка для заблокированного потока? Является ли 'async_open' пользовательской операцией более высокого уровня? –