@@ -49,23 +49,47 @@ impl<T: SetBufInit, O> BufResultExt for BufResult<(usize, O), T> {
49
49
}
50
50
}
51
51
52
- /// Helper trait for [`RecvFrom`] and [`RecvFromVectored`].
52
+ impl < T : SetBufInit , C : SetBufInit , O > BufResultExt for BufResult < ( usize , usize , O ) , ( T , C ) > {
53
+ fn map_advanced ( self ) -> Self {
54
+ self . map (
55
+ |( init_buffer, init_control, obj) , ( mut buffer, mut control) | {
56
+ unsafe {
57
+ buffer. set_buf_init ( init_buffer) ;
58
+ control. set_buf_init ( init_control) ;
59
+ }
60
+ ( ( init_buffer, init_control, obj) , ( buffer, control) )
61
+ } ,
62
+ )
63
+ }
64
+ }
65
+
66
+ /// Helper trait for [`RecvFrom`], [`RecvFromVectored`] and [`RecvMsg`].
53
67
pub trait RecvResultExt {
54
68
/// The mapped result.
55
- type RecvFromResult ;
69
+ type RecvResult ;
56
70
57
71
/// Create [`SockAddr`] if the result is [`Ok`].
58
- fn map_addr ( self ) -> Self :: RecvFromResult ;
72
+ fn map_addr ( self ) -> Self :: RecvResult ;
59
73
}
60
74
61
75
impl < T > RecvResultExt for BufResult < usize , ( T , sockaddr_storage , socklen_t ) > {
62
- type RecvFromResult = BufResult < ( usize , SockAddr ) , T > ;
76
+ type RecvResult = BufResult < ( usize , SockAddr ) , T > ;
77
+
78
+ fn map_addr ( self ) -> Self :: RecvResult {
79
+ self . map_buffer ( |( buffer, addr_buffer, addr_size) | ( buffer, addr_buffer, addr_size, 0 ) )
80
+ . map_addr ( )
81
+ . map_res ( |( res, _, addr) | ( res, addr) )
82
+ }
83
+ }
84
+
85
+ impl < T > RecvResultExt for BufResult < usize , ( T , sockaddr_storage , socklen_t , usize ) > {
86
+ type RecvResult = BufResult < ( usize , usize , SockAddr ) , T > ;
63
87
64
- fn map_addr ( self ) -> Self :: RecvFromResult {
88
+ fn map_addr ( self ) -> Self :: RecvResult {
65
89
self . map2 (
66
- |res, ( buffer, addr_buffer, addr_size) | {
90
+ |res, ( buffer, addr_buffer, addr_size, len ) | {
67
91
let addr = unsafe { SockAddr :: new ( addr_buffer, addr_size) } ;
68
- ( ( res, addr) , buffer)
92
+ ( ( res, len , addr) , buffer)
69
93
} ,
70
94
|( buffer, ..) | buffer,
71
95
)
0 commit comments