ドメインソケット経由で接続を受信するサーバーを作成しようとしています。サーバーを起動すると、ファイルシステムにソケットが作成されていることがわかります。しかし、 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-free バージョンを使用していますが、それが問題になるとは思いません。
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に変更したのは、コードが読みやすくなると思ったからですが、ドキュメントが非常に曖昧であることがわかりました。