mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 10:12:39 +01:00
ircd::net: Unionize datagram for bidirections.
This commit is contained in:
parent
fe0bd19763
commit
e5834065ed
2 changed files with 41 additions and 4 deletions
|
@ -66,10 +66,27 @@ struct ircd::net::listener_udp
|
|||
|
||||
struct ircd::net::listener_udp::datagram
|
||||
{
|
||||
mutable_buffer buf;
|
||||
union
|
||||
{
|
||||
const_buffer cbuf;
|
||||
mutable_buffer mbuf;
|
||||
};
|
||||
|
||||
union
|
||||
{
|
||||
vector_view<const_buffer> cbufs;
|
||||
vector_view<mutable_buffer> mbufs;
|
||||
};
|
||||
|
||||
ipport remote;
|
||||
enum flag flag {(enum flag)0};
|
||||
vector_view<mutable_buffer> bufs { &buf, 1 };
|
||||
|
||||
datagram(const const_buffer &buf,
|
||||
const ipport &remote,
|
||||
const enum flag &flag = (enum flag)0);
|
||||
|
||||
datagram(const mutable_buffer &buf,
|
||||
const enum flag &flag = (enum flag)0);
|
||||
|
||||
datagram() = default;
|
||||
};
|
||||
|
|
24
ircd/net.cc
24
ircd/net.cc
|
@ -1559,11 +1559,11 @@ ircd::net::listener_udp::acceptor::operator()(datagram &datagram)
|
|||
ip::udp::endpoint ep;
|
||||
const size_t rlen
|
||||
{
|
||||
a.async_receive_from(datagram.bufs, ep, flags(datagram.flag), yield_context{to_asio{}})
|
||||
a.async_receive_from(datagram.mbufs, ep, flags(datagram.flag), yield_context{to_asio{}})
|
||||
};
|
||||
|
||||
datagram.remote = make_ipport(ep);
|
||||
datagram.buf = {data(datagram.buf), rlen};
|
||||
datagram.mbuf = {data(datagram.mbuf), rlen};
|
||||
return datagram;
|
||||
}
|
||||
|
||||
|
@ -1578,6 +1578,26 @@ ircd::net::listener_udp::acceptor::flags(const flag &flag)
|
|||
return ret;
|
||||
}
|
||||
|
||||
//
|
||||
// listener_udp::datagram
|
||||
//
|
||||
|
||||
ircd::net::listener_udp::datagram::datagram(const const_buffer &buf,
|
||||
const ipport &remote,
|
||||
const enum flag &flag)
|
||||
:cbuf{buf}
|
||||
,cbufs{&cbuf, 1}
|
||||
,remote{remote}
|
||||
,flag{flag}
|
||||
{}
|
||||
|
||||
ircd::net::listener_udp::datagram::datagram(const mutable_buffer &buf,
|
||||
const enum flag &flag)
|
||||
:mbuf{buf}
|
||||
,mbufs{&mbuf, 1}
|
||||
,flag{flag}
|
||||
{}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// net/scope_timeout.h
|
||||
|
|
Loading…
Reference in a new issue