我试图创建一个通过域套接字接收连接的服务器。我可以启动服务器,并可以看到在文件系统上创建的套接字。但每当我试着通过socat连接到它,我得到以下错误:当连接到由Boost.Asio创建的域套接字时,拒绝权限
2015/03/02 14:00:10 socat[62720] E connect(3, LEN=19 AF=1 "/var/tmp/rpc.sock", 19): Connection refused
这是我的短耳代码(只有.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,因为我认为这将使更多的可读代码,但我发现文档非常模糊。
检查套接字文件的权限,特别是检查'socat'用户是否可以读写它。 – 2015-03-02 15:36:20
所有进程都在我的用户名下。 – ruipacheco 2015-03-02 15:50:04