#include #include #include #include #include const std::string socket_path = "/tmp/sok"; typedef boost::asio::local::stream_protocol::socket socket_t; typedef socket_t* socket_ptr_t; // do not destroy connected sockets, so they remain connected boost::asio::io_service io; boost::asio::io_service::work io_work(io); boost::asio::local::stream_protocol::acceptor acceptor(io); void start_server() { // just listen, do not accept connections ::unlink(socket_path.c_str()); acceptor.open(boost::asio::local::stream_protocol()); acceptor.bind(boost::asio::local::stream_protocol::endpoint(socket_path)); acceptor.listen(); } void handle_connect(socket_ptr_t sp, const boost::system::error_code& ec) { if (!ec) { // successful connect, try write() boost::system::error_code wec; const size_t w = boost::asio::write(*sp, boost::asio::buffer("a",1), wec); if (wec) { std::cerr << "write error: " << wec.message() << std::endl; _exit(1); } } } int main() { boost::thread io_run_thr(boost::bind(&boost::asio::io_service::run, &io)); start_server(); while (1) { socket_ptr_t sp(new socket_t(io)); sp->async_connect( boost::asio::local::stream_protocol::endpoint(socket_path), boost::bind(&handle_connect, sp, boost::asio::placeholders::error) ); } }