Использование boost :: asio чтение асинхронного сокета домена unix /run/acpid.socket

Я пытаюсь прочитать события от демона acpi. Я хочу знать, когда кнопка питания нажата и на основе событий асинхронного материала.

Знаете ли вы лучший способ сделать это без ACPI?

Мой текущий пример кода (кстати, работает способ синхронизации):

#include <cstdlib>
#include <cstring>
#include <iostream>
#include <boost/asio.hpp>
#include <thread>
#include <chrono>

using boost::asio::local::stream_protocol;
using namespace std; // For strlen.

enum { max_length = 1024 };
boost::asio::streambuf response;

void handle_read_content(const boost::system::error_code& err, std::size_t bytes_transferred)
{
std::cout << "handle_read_content" << std::endl;
if (!err)
{
// Write all of the data that has been read so far.
std::cout << &response;
}
else if (err != boost::asio::error::eof)
{
std::cout << "Error: " << err << "\n";
}
}

int main(int argc, char* argv[])
{
try
{

boost::asio::io_service io_service;
stream_protocol::socket s(io_service);
stream_protocol::endpoint ep("/run/acpid.socket");
s.connect(ep);

std::cout << "Set the async_read" << std::endl;
boost::asio::async_read(s, response,
boost::asio::transfer_all(),
handle_read_content);

std::cout << "Sart the io_service" << std::endl;
io_service.run();

}
catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << "\n";
}

//do not quit the application
for(;;) {
std::this_thread::sleep_for(std::chrono::seconds(1));
}

return 0;
}

Handle_read_content никогда не вызывается:

   Set the async_read
Start the io_service

Но acpi_listen показывает правильный вывод:

   acpi_listen
PNP0C14:01 000000d0 00000000

У вас есть подсказки, идеи или можете указать мне правильное решение?

Спасибо в любом случае и пока
Darian

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]