Skip to content

Commit 7aac743

Browse files
committed
test(net): udp send msg
1 parent ca20ab9 commit 7aac743

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

compio-net/tests/udp.rs

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use compio_net::UdpSocket;
1+
use compio_net::{CMsgBuilder, CMsgIter, UdpSocket};
22

33
#[compio_macros::test]
44
async fn connect() {
@@ -64,3 +64,53 @@ async fn send_to() {
6464
active_addr
6565
);
6666
}
67+
68+
#[compio_macros::test]
69+
async fn send_msg_with_ipv6_ecn() {
70+
#[cfg(unix)]
71+
use libc::{IPPROTO_IPV6, IPV6_RECVTCLASS, IPV6_TCLASS};
72+
#[cfg(windows)]
73+
use windows_sys::Win32::Networking::WinSock::{
74+
IPPROTO_IPV6, IPV6_ECN, IPV6_RECVTCLASS, IPV6_TCLASS,
75+
};
76+
77+
const MSG: &str = "foo bar baz";
78+
79+
let passive = UdpSocket::bind("[::1]:0").await.unwrap();
80+
let passive_addr = passive.local_addr().unwrap();
81+
82+
passive
83+
.set_socket_option(IPPROTO_IPV6, IPV6_RECVTCLASS, &1)
84+
.unwrap();
85+
86+
let active = UdpSocket::bind("[::1]:0").await.unwrap();
87+
let active_addr = active.local_addr().unwrap();
88+
89+
let mut control = vec![0u8; 32];
90+
let mut builder = CMsgBuilder::new(&mut control);
91+
92+
const ECN_BITS: i32 = 0b11;
93+
94+
#[cfg(unix)]
95+
builder
96+
.try_push(IPPROTO_IPV6, IPV6_TCLASS, ECN_BITS)
97+
.unwrap();
98+
#[cfg(windows)]
99+
builder.try_push(IPPROTO_IPV6, IPV6_ECN, ECN_BITS).unwrap();
100+
101+
let len = builder.finish();
102+
control.truncate(len);
103+
104+
active.send_msg(MSG, control, passive_addr).await.unwrap();
105+
106+
let res = passive.recv_msg(Vec::with_capacity(20), [0u8; 32]).await;
107+
assert_eq!(res.0.unwrap().1, active_addr);
108+
assert_eq!(res.1.0, MSG.as_bytes());
109+
unsafe {
110+
let mut iter = CMsgIter::new(&res.1.1);
111+
let cmsg = iter.next().unwrap();
112+
assert_eq!(cmsg.level(), IPPROTO_IPV6);
113+
assert_eq!(cmsg.ty(), IPV6_TCLASS);
114+
assert_eq!(cmsg.data::<i32>(), &ECN_BITS);
115+
}
116+
}

0 commit comments

Comments
 (0)