Skip to content

Commit f2794ff

Browse files
author
Gleb Pomykalov
committed
Rework sendrecv
1 parent 37f841f commit f2794ff

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

test/sys/test_socket.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,10 @@ mod recvfrom {
169169

170170
const MSG: &'static [u8] = b"Hello, World!";
171171

172-
fn sendrecv<F>(rsock: RawFd, ssock: RawFd, max_recv_once: Option<usize>, f: F) -> Option<SockAddr>
173-
where F: Fn(RawFd, &[u8], MsgFlags) -> Result<usize> + Send + 'static
172+
fn sendrecv<Fs, Fr>(rsock: RawFd, ssock: RawFd, f_send: Fs, f_recv: Fr) -> Option<SockAddr>
173+
where
174+
Fs: Fn(RawFd, &[u8], MsgFlags) -> Result<usize> + Send + 'static,
175+
Fr: Fn(usize, Option<SockAddr>),
174176
{
175177
let mut buf: [u8; 13] = [0u8; 13];
176178
let mut l = 0;
@@ -179,15 +181,13 @@ mod recvfrom {
179181
let send_thread = thread::spawn(move || {
180182
let mut l = 0;
181183
while l < std::mem::size_of_val(MSG) {
182-
l += f(ssock, &MSG[l..], MsgFlags::empty()).unwrap();
184+
l += f_send(ssock, &MSG[l..], MsgFlags::empty()).unwrap();
183185
}
184186
});
185187

186188
while l < std::mem::size_of_val(MSG) {
187189
let (len, from_) = recvfrom(rsock, &mut buf[l..]).unwrap();
188-
if let Some(max) = max_recv_once {
189-
assert!(len <= max);
190-
}
190+
f_recv(len, from_);
191191
from = from_;
192192
l += len;
193193
}
@@ -201,9 +201,9 @@ mod recvfrom {
201201
let (fd2, fd1) = socketpair(AddressFamily::Unix, SockType::Stream,
202202
None, SockFlag::empty()).unwrap();
203203
// Ignore from for stream sockets
204-
let _ = sendrecv(fd1, fd2, None, |s, m, flags| {
204+
let _ = sendrecv(fd1, fd2, |s, m, flags| {
205205
send(s, m, flags)
206-
});
206+
}, |_, _| {});
207207
}
208208

209209
#[test]
@@ -223,9 +223,9 @@ mod recvfrom {
223223
SockFlag::empty(),
224224
None,
225225
).expect("send socket failed");
226-
let from = sendrecv(rsock, ssock, None, move |s, m, flags| {
226+
let from = sendrecv(rsock, ssock, move |s, m, flags| {
227227
sendto(s, m, &sock_addr, flags)
228-
});
228+
},|_, _| {});
229229
// UDP sockets should set the from address
230230
assert_eq!(AddressFamily::Inet, from.unwrap().family());
231231
}
@@ -261,10 +261,12 @@ mod recvfrom {
261261
None,
262262
).expect("send socket failed");
263263

264-
let from = sendrecv(rsock, ssock, Some(segment_size), move |s, m, flags| {
264+
let from = sendrecv(rsock, ssock, move |s, m, flags| {
265265
let iov = [IoVec::from_slice(m)];
266266
let cmsg = ControlMessage::UdpGsoSegments(&2);
267267
sendmsg(s, &iov, &[cmsg], flags, Some(&sock_addr))
268+
}, |len, _| {
269+
assert!(len <= segment_size as usize);
268270
});
269271
// UDP sockets should set the from address
270272
assert_eq!(AddressFamily::Inet, from.unwrap().family());
@@ -293,11 +295,11 @@ mod recvfrom {
293295
None,
294296
).expect("send socket failed");
295297

296-
let from = sendrecv(rsock, ssock, None, move |s, m, flags| {
298+
let from = sendrecv(rsock, ssock, move |s, m, flags| {
297299
let iov = [IoVec::from_slice(m)];
298300
let cmsg = ControlMessage::UdpGsoSegments(&2);
299301
sendmsg(s, &iov, &[cmsg], flags, Some(&sock_addr))
300-
});
302+
}, |_, _| {});
301303

302304
// UDP sockets should set the from address
303305
assert_eq!(AddressFamily::Inet, from.unwrap().family());

0 commit comments

Comments
 (0)