aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/transport/udp_zero_copy_asio.cpp
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-04-12 13:39:09 -0700
committerJosh Blum <josh@joshknows.com>2010-04-12 13:39:09 -0700
commite611e610f64b473cdd9d0aa5e40690d7550c3cc0 (patch)
tree235c21fd842e05264fd54f85d7ce4045fae42901 /host/lib/transport/udp_zero_copy_asio.cpp
parent0021abf18aaf3831d8aaa40574f1876c4f346a92 (diff)
downloaduhd-e611e610f64b473cdd9d0aa5e40690d7550c3cc0.tar.gz
uhd-e611e610f64b473cdd9d0aa5e40690d7550c3cc0.tar.bz2
uhd-e611e610f64b473cdd9d0aa5e40690d7550c3cc0.zip
Added data type conversion routines to transport api.
Diffstat (limited to 'host/lib/transport/udp_zero_copy_asio.cpp')
-rw-r--r--host/lib/transport/udp_zero_copy_asio.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/host/lib/transport/udp_zero_copy_asio.cpp b/host/lib/transport/udp_zero_copy_asio.cpp
index 13fd50f65..3e0e80bd8 100644
--- a/host/lib/transport/udp_zero_copy_asio.cpp
+++ b/host/lib/transport/udp_zero_copy_asio.cpp
@@ -110,6 +110,9 @@ private:
size_t get_recv_buff_size(void);
void set_recv_buff_size(size_t);
+
+ static const size_t _mtu = 1500; //FIXME we have no idea
+ static const size_t _hdrs = (2 + 14 + 20 + 8); //size of headers (pad, eth, ip, udp)
};
udp_zero_copy_impl::udp_zero_copy_impl(const std::string &addr, const std::string &port){
@@ -143,7 +146,7 @@ udp_zero_copy_impl::~udp_zero_copy_impl(void){
}
managed_recv_buffer::sptr udp_zero_copy_impl::get_recv_buff(void){
- boost::uint32_t *buff_mem = new boost::uint32_t[1500/sizeof(boost::uint32_t)];
+ boost::uint32_t *buff_mem = new boost::uint32_t[_mtu/sizeof(boost::uint32_t)];
//implement timeout through polling and sleeping
size_t available = 0;
@@ -155,7 +158,7 @@ managed_recv_buffer::sptr udp_zero_copy_impl::get_recv_buff(void){
//receive only if data is available
if (available){
- available = _socket->receive(boost::asio::buffer(buff_mem, available));
+ available = _socket->receive(boost::asio::buffer(buff_mem, _mtu));
}
//create a new managed buffer to house the data
@@ -165,9 +168,9 @@ managed_recv_buffer::sptr udp_zero_copy_impl::get_recv_buff(void){
}
managed_send_buffer::sptr udp_zero_copy_impl::get_send_buff(void){
- boost::uint32_t *buff_mem = new boost::uint32_t[1500/sizeof(boost::uint32_t)];
+ boost::uint32_t *buff_mem = new boost::uint32_t[_mtu/sizeof(boost::uint32_t)];
return managed_send_buffer::sptr(
- new managed_send_buffer_impl(boost::asio::buffer(buff_mem, 1500), _socket)
+ new managed_send_buffer_impl(boost::asio::buffer(buff_mem, _mtu-_hdrs), _socket)
);
}