Ticket #6048: conn.cc

File conn.cc, 1.4 KB (added by Gennady Proskurin <gpr@…>, 11 years ago)
Line 
1#include <boost/asio.hpp>
2#include <boost/thread.hpp>
3#include <string>
4#include <iostream>
5
6#include <unistd.h>
7
8const std::string socket_path = "/tmp/sok";
9typedef boost::asio::local::stream_protocol::socket socket_t;
10typedef socket_t* socket_ptr_t; // do not destroy connected sockets, so they remain connected
11
12boost::asio::io_service io;
13boost::asio::io_service::work io_work(io);
14boost::asio::local::stream_protocol::acceptor acceptor(io);
15
16void start_server()
17{
18 // just listen, do not accept connections
19 ::unlink(socket_path.c_str());
20 acceptor.open(boost::asio::local::stream_protocol());
21 acceptor.bind(boost::asio::local::stream_protocol::endpoint(socket_path));
22 acceptor.listen();
23}
24
25void handle_connect(socket_ptr_t sp, const boost::system::error_code& ec)
26{
27 if (!ec) {
28 // successful connect, try write()
29 boost::system::error_code wec;
30 const size_t w = boost::asio::write(*sp, boost::asio::buffer("a",1), wec);
31 if (wec) {
32 std::cerr << "write error: " << wec.message() << std::endl;
33 _exit(1);
34 }
35 }
36}
37
38int main()
39{
40 boost::thread io_run_thr(boost::bind(&boost::asio::io_service::run, &io));
41 start_server();
42 while (1) {
43 socket_ptr_t sp(new socket_t(io));
44 sp->async_connect(
45 boost::asio::local::stream_protocol::endpoint(socket_path),
46 boost::bind(&handle_connect, sp, boost::asio::placeholders::error)
47 );
48 }
49}