我正在尝试创建一个通过域套接字接收连接的服务器。我可以启动服务器,并且可以看到正在文件系统上创建的套接字。但是每当我尝试通过socat连接到它时,我都会收到以下错误:
2015/03/02 14:00:10 socat[62720] E connect(3, LEN=19 AF=1 "/var/tmp/rpc.sock", 19): Connection refused
这是我的 Asio 代码(仅 .cpp 文件)。尽管帖子标题我使用的是 Asio 的无 Boost 版本,但我认为这不是问题。
namespace myapp {
DomainListener::DomainListener(const string& addr) : socket{this->service}, Listener{addr} {
remove(this->address.c_str());
stream_protocol::endpoint ep(this->address);
stream_protocol::acceptor acceptor(this->service, ep);
acceptor.async_accept(this->socket, ep, bind(&DomainListener::accept_callback, this, _1));
}
DomainListener::~DomainListener() {
this->service.stop();
remove(this->address.c_str());
}
void DomainListener::accept_callback(const error_code& ec) noexcept {
this->socket.async_read_some(asio::buffer(this->data), bind(&DomainListener::read_data, this, _1, _2));
}
void DomainListener::read_data(const error_code& ec, size_t length) noexcept {
//std::cerr << "AAA" << std::endl;
//std::cerr << this->data[0] << std::endl;
//std::cerr << "BBB" << std::endl;
}
}
Listener::Listener(const string& addr) : work{asio::io_service::work(this->service)} {
this->address = addr;
}
void Listener::listen() {
this->service.run();
}
Listener::~Listener() {
}
在使用这些类的代码中,listen()
每当我想开始侦听套接字以进行连接时,我都会调用它。
我已经设法让它与 libuv 一起使用并更改为 Asio,因为我认为它会使代码更具可读性,但我发现文档非常模棱两可。