@@ -169,8 +169,10 @@ mod recvfrom {
169
169
170
170
const MSG : & ' static [ u8 ] = b"Hello, World!" ;
171
171
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 > ) ,
174
176
{
175
177
let mut buf: [ u8 ; 13 ] = [ 0u8 ; 13 ] ;
176
178
let mut l = 0 ;
@@ -179,15 +181,13 @@ mod recvfrom {
179
181
let send_thread = thread:: spawn ( move || {
180
182
let mut l = 0 ;
181
183
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 ( ) ;
183
185
}
184
186
} ) ;
185
187
186
188
while l < std:: mem:: size_of_val ( MSG ) {
187
189
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_) ;
191
191
from = from_;
192
192
l += len;
193
193
}
@@ -201,9 +201,9 @@ mod recvfrom {
201
201
let ( fd2, fd1) = socketpair ( AddressFamily :: Unix , SockType :: Stream ,
202
202
None , SockFlag :: empty ( ) ) . unwrap ( ) ;
203
203
// Ignore from for stream sockets
204
- let _ = sendrecv ( fd1, fd2, None , |s, m, flags| {
204
+ let _ = sendrecv ( fd1, fd2, |s, m, flags| {
205
205
send ( s, m, flags)
206
- } ) ;
206
+ } , |_ , _| { } ) ;
207
207
}
208
208
209
209
#[ test]
@@ -223,9 +223,9 @@ mod recvfrom {
223
223
SockFlag :: empty ( ) ,
224
224
None ,
225
225
) . 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| {
227
227
sendto ( s, m, & sock_addr, flags)
228
- } ) ;
228
+ } , |_ , _| { } ) ;
229
229
// UDP sockets should set the from address
230
230
assert_eq ! ( AddressFamily :: Inet , from. unwrap( ) . family( ) ) ;
231
231
}
@@ -261,10 +261,12 @@ mod recvfrom {
261
261
None ,
262
262
) . expect ( "send socket failed" ) ;
263
263
264
- let from = sendrecv ( rsock, ssock, Some ( segment_size ) , move |s, m, flags| {
264
+ let from = sendrecv ( rsock, ssock, move |s, m, flags| {
265
265
let iov = [ IoVec :: from_slice ( m) ] ;
266
266
let cmsg = ControlMessage :: UdpGsoSegments ( & 2 ) ;
267
267
sendmsg ( s, & iov, & [ cmsg] , flags, Some ( & sock_addr) )
268
+ } , |len, _| {
269
+ assert ! ( len <= segment_size as usize ) ;
268
270
} ) ;
269
271
// UDP sockets should set the from address
270
272
assert_eq ! ( AddressFamily :: Inet , from. unwrap( ) . family( ) ) ;
@@ -293,11 +295,11 @@ mod recvfrom {
293
295
None ,
294
296
) . expect ( "send socket failed" ) ;
295
297
296
- let from = sendrecv ( rsock, ssock, None , move |s, m, flags| {
298
+ let from = sendrecv ( rsock, ssock, move |s, m, flags| {
297
299
let iov = [ IoVec :: from_slice ( m) ] ;
298
300
let cmsg = ControlMessage :: UdpGsoSegments ( & 2 ) ;
299
301
sendmsg ( s, & iov, & [ cmsg] , flags, Some ( & sock_addr) )
300
- } ) ;
302
+ } , |_ , _| { } ) ;
301
303
302
304
// UDP sockets should set the from address
303
305
assert_eq ! ( AddressFamily :: Inet , from. unwrap( ) . family( ) ) ;
0 commit comments