I would need to create C++ console application that runs under non-privileged user under Android 5 (rooted). This application listens on some socket port and accepts connections. It is implemented with boost::asio. When application runs as a root, then everything works. When it runs as an ordinary user, then application crashes when it tries to open acceptor:
    const boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 3784);
    boost::asio::ip::tcp::acceptor acceptor(ioService);
    acceptor.open(endpoint.protocol()); // Here it throws an exception
The exception is a bit confusing but probably it means that I don't have access rights to touch sockets:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what():  open: Permission denied
Aborted
I tried to run application under user shell and under user media. I also tried to run it under user u0_a83, that is assigned to ProxyDroid on my device.
I changed /system/etc/permissions/platform.xml -- I assigned permission android.permission.INTERNET to user shell and media . I also tried to add group media to android.permission.INTERNET, but nothing has helped.
Btw. this is a special case when I really need to implement application in C++ to run under Android. Implementation in Java is not acceptable in my project.
