이것은 예제를 기반으로 한 내 Boost.Asio 프로젝트의 SSCCE입니다. 그것은 아래로 이것에 버그를 추적하기 위해 한 시간 정도 걸렸다 :Boost.Asio segfault, 이유가 없습니다.
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
class Connection {
public:
Connection(boost::asio::io_service& io_service) : socket(io_service) {}
private:
boost::asio::ip::tcp::socket socket;
};
class Server {
public:
Server() : signal_monitor(io_service) {
signal_monitor.add(SIGINT);
signal_monitor.add(SIGTERM);
signal_monitor.async_wait(
boost::bind(&Server::handle_signal_caught, this)
);
}
void run() {
// comment out the next line and there's no segfault
connection.reset(new Connection(io_service));
io_service.run();
}
private:
void handle_signal_caught() {
io_service.stop();
}
boost::shared_ptr<Connection> connection;
boost::asio::io_service io_service;
boost::asio::signal_set signal_monitor;
};
int main(int argc, char **argv) {
Server server;
server.run();
return 0;
}
내가 신호 (CTRL + C) 대신에 잘 종료의 프로그램 세그먼테이션 폴트 (segfault)를 보낼 때. 나는 지난 30 분을 보면서 이것을 보았지만, 왜 이것이 왜 세그 폴트하는지 알지 못한다. 혹시 너희들이 문제를 발견 할 수 있을까?