| 260 | /// `sendmsg_addr` instead of `sendmsg`. |
| 261 | #[cfg(not(any(target_os = "espidf", target_os = "redox", target_os = "wasi")))] |
| 262 | fn do_test_unix_msg_unconnected(addr: SocketAddrUnix) { |
| 263 | use rustix::io::{IoSlice, IoSliceMut}; |
| 264 | use rustix::net::{recvmsg, sendmsg_addr, RecvFlags, ReturnFlags, SendFlags}; |
| 265 | |
| 266 | let server = { |
| 267 | let runs: &[i32] = &[3, 184, 187, 0]; |
| 268 | let data_socket = socket(AddressFamily::UNIX, SocketType::DGRAM, None).unwrap(); |
| 269 | bind(&data_socket, &addr).unwrap(); |
| 270 | |
| 271 | move || { |
| 272 | let mut buffer = vec![0; BUFFER_SIZE]; |
| 273 | for expected_sum in runs { |
| 274 | let mut sum = 0; |
| 275 | loop { |
| 276 | let result = recvmsg( |
| 277 | &data_socket, |
| 278 | &mut [IoSliceMut::new(&mut buffer)], |
| 279 | &mut Default::default(), |
| 280 | RecvFlags::empty(), |
| 281 | ) |
| 282 | .unwrap(); |
| 283 | let nread = result.bytes; |
| 284 | |
| 285 | assert_eq!(result.flags, ReturnFlags::empty()); |
| 286 | |
| 287 | assert_ne!(&buffer[..nread], b"exit"); |
| 288 | if &buffer[..nread] == b"sum" { |
| 289 | break; |
| 290 | } |
| 291 | |
| 292 | sum += i32::from_str(&String::from_utf8_lossy(&buffer[..nread])).unwrap(); |
| 293 | } |
| 294 | |
| 295 | assert_eq!(sum, *expected_sum); |
| 296 | } |
| 297 | let result = recvmsg( |
| 298 | &data_socket, |
| 299 | &mut [IoSliceMut::new(&mut buffer)], |
| 300 | &mut Default::default(), |
| 301 | RecvFlags::empty(), |
| 302 | ) |
| 303 | .unwrap(); |
| 304 | let nread = result.bytes; |
| 305 | |
| 306 | assert_eq!(&buffer[..nread], b"exit"); |
| 307 | assert_eq!(result.flags, ReturnFlags::empty()); |
| 308 | } |
| 309 | }; |
| 310 | |
| 311 | let client = move || { |
| 312 | let runs: &[&[&str]] = &[&["1", "2"], &["4", "77", "103"], &["5", "78", "104"], &[]]; |
| 313 | |
| 314 | for args in runs { |
| 315 | let data_socket = socket(AddressFamily::UNIX, SocketType::DGRAM, None).unwrap(); |
| 316 | |
| 317 | for arg in *args { |
| 318 | sendmsg_addr( |
| 319 | &data_socket, |