initial commit
[raggin.git] / src / socket.cpp
blob4d573d3628d139475009be47d3b87b682147fa79
1 #include "socket.hpp"
2 #include "Log.hpp"
3 #include <boost/bind.hpp>
5 using namespace std;
6 using namespace boost;
7 using namespace boost::asio;
8 using namespace boost::asio::ip;
11 raggin::socket::socket(asio::io_service& io_service)
12 :tcp::socket(io_service)
16 raggin::socket::socket(socket_ptr other_socket_ptr)
17 :tcp::socket(other_socket_ptr->get_io_service(), tcp::v4(), other_socket_ptr->native())
18 ,other_socket_ptr_(other_socket_ptr)
22 raggin::socket::~socket()
26 void raggin::socket::close()
28 close();
31 void raggin::socket::accept(uint16_t port)
33 acceptor_ptr_.reset(new tcp::acceptor(get_io_service(), tcp::endpoint(tcp::v4(), port)));
34 try
36 acceptor_ptr_->accept(static_cast<boost::asio::ip::tcp::socket&>(*this));
37 acceptor_ptr_.reset();
39 catch(...)
41 acceptor_ptr_.reset();
42 throw;
46 void raggin::socket::async_accept(uint16_t port, accept_handler handler)
48 acceptor_ptr_.reset(new tcp::acceptor(get_io_service(), tcp::endpoint(tcp::v4(),port)));
49 acceptor_ptr_->async_accept(static_cast<boost::asio::ip::tcp::socket&>(*this),
50 boost::bind(&socket::handle_async_accept, this, _1, handler));
53 void raggin::socket::handle_async_accept(const boost::system::error_code& error, accept_handler handler)
55 LOG << "socket.handle_async_accept: " << (error?"error":"no error");
56 acceptor_ptr_.reset();
57 handler(error);
60 void raggin::socket::connect(const string& ip, uint16_t port)
62 tcp::endpoint endpoint(address().from_string(ip), port);
63 tcp::socket::connect(endpoint);
66 void raggin::socket::async_connect(tcp::endpoint endpoint, connect_handler handler)
68 LOG << "socket.async_connect";
69 tcp::socket::async_connect(endpoint, handler);
72 void raggin::socket::async_connect(const string& ip, uint16_t port, connect_handler handler)
74 tcp::endpoint endpoint(address::from_string(ip), port);
75 async_connect(endpoint, handler);
79 boost::asio::ip::tcp::endpoint raggin::socket::local_endpoint() const
81 return tcp::socket::local_endpoint();
84 boost::asio::ip::tcp::endpoint raggin::socket::remote_endpoint() const
86 return tcp::socket::remote_endpoint();