Revision 1fef438d host/lib/transport/udp_simple.cpp
| b/host/lib/transport/udp_simple.cpp | ||
|---|---|---|
| 36 | 36 |
//resolve the address |
| 37 | 37 |
asio::ip::udp::resolver resolver(_io_service); |
| 38 | 38 |
asio::ip::udp::resolver::query query(asio::ip::udp::v4(), addr, port); |
| 39 |
_receiver_endpoint = *resolver.resolve(query);
|
|
| 39 |
_send_endpoint = *resolver.resolve(query);
|
|
| 40 | 40 |
|
| 41 | 41 |
//create and open the socket |
| 42 | 42 |
_socket = socket_sptr(new asio::ip::udp::socket(_io_service)); |
| ... | ... | |
| 46 | 46 |
_socket->set_option(asio::socket_base::broadcast(bcast)); |
| 47 | 47 |
|
| 48 | 48 |
//connect the socket |
| 49 |
if (connect) _socket->connect(_receiver_endpoint);
|
|
| 49 |
if (connect) _socket->connect(_send_endpoint);
|
|
| 50 | 50 |
|
| 51 | 51 |
} |
| 52 | 52 |
|
| 53 | 53 |
size_t send(const asio::const_buffer &buff){
|
| 54 | 54 |
if (_connected) return _socket->send(asio::buffer(buff)); |
| 55 |
return _socket->send_to(asio::buffer(buff), _receiver_endpoint);
|
|
| 55 |
return _socket->send_to(asio::buffer(buff), _send_endpoint);
|
|
| 56 | 56 |
} |
| 57 | 57 |
|
| 58 | 58 |
size_t recv(const asio::mutable_buffer &buff, double timeout){
|
| 59 | 59 |
if (not wait_for_recv_ready(_socket->native(), timeout)) return 0; |
| 60 |
return _socket->receive(asio::buffer(buff)); |
|
| 60 |
return _socket->receive_from(asio::buffer(buff), _recv_endpoint); |
|
| 61 |
} |
|
| 62 |
|
|
| 63 |
std::string get_recv_addr(void){
|
|
| 64 |
return _recv_endpoint.address().to_string(); |
|
| 61 | 65 |
} |
| 62 | 66 |
|
| 63 | 67 |
private: |
| 64 | 68 |
bool _connected; |
| 65 | 69 |
asio::io_service _io_service; |
| 66 | 70 |
socket_sptr _socket; |
| 67 |
asio::ip::udp::endpoint _receiver_endpoint; |
|
| 71 |
asio::ip::udp::endpoint _send_endpoint; |
|
| 72 |
asio::ip::udp::endpoint _recv_endpoint; |
|
| 68 | 73 |
}; |
| 69 | 74 |
|
| 70 | 75 |
/*********************************************************************** |
Also available in: Unified diff