@@ -6,8 +6,9 @@ use compio_driver::op::CreateSocket;
6
6
use compio_driver:: {
7
7
impl_raw_fd,
8
8
op:: {
9
- Accept , BufResultExt , CloseSocket , Connect , Recv , RecvFrom , RecvFromVectored ,
10
- RecvResultExt , RecvVectored , Send , SendTo , SendToVectored , SendVectored , ShutdownSocket ,
9
+ Accept , BufResultExt , CloseSocket , Connect , MsgBuf , Recv , RecvFrom , RecvFromVectored ,
10
+ RecvMsg , RecvMsgVectored , RecvResultExt , RecvVectored , Send , SendMsg , SendMsgVectored ,
11
+ SendTo , SendToVectored , SendVectored , ShutdownSocket ,
11
12
} ,
12
13
ToSharedFd ,
13
14
} ;
@@ -256,6 +257,36 @@ impl Socket {
256
257
. map_advanced ( )
257
258
}
258
259
260
+ pub async fn recv_msg < T : IoBufMut , C : IoBufMut > (
261
+ & self ,
262
+ buffer : T ,
263
+ control : C ,
264
+ ) -> BufResult < ( usize , SockAddr ) , ( T , C ) > {
265
+ let fd = self . to_shared_fd ( ) ;
266
+ let op = RecvMsg :: new ( fd, MsgBuf :: new ( buffer, control) ) ;
267
+ compio_runtime:: submit ( op)
268
+ . await
269
+ . into_inner ( )
270
+ . map_addr ( )
271
+ . map_advanced ( )
272
+ . map_buffer ( MsgBuf :: into_tuple)
273
+ }
274
+
275
+ pub async fn recv_msg_vectored < T : IoVectoredBufMut , C : IoBufMut > (
276
+ & self ,
277
+ buffer : T ,
278
+ control : C ,
279
+ ) -> BufResult < ( usize , SockAddr ) , ( T , C ) > {
280
+ let fd = self . to_shared_fd ( ) ;
281
+ let op = RecvMsgVectored :: new ( fd, MsgBuf :: new ( buffer, control) ) ;
282
+ compio_runtime:: submit ( op)
283
+ . await
284
+ . into_inner ( )
285
+ . map_addr ( )
286
+ . map_advanced ( )
287
+ . map_buffer ( MsgBuf :: into_tuple)
288
+ }
289
+
259
290
pub async fn send_to < T : IoBuf > ( & self , buffer : T , addr : & SockAddr ) -> BufResult < usize , T > {
260
291
let fd = self . to_shared_fd ( ) ;
261
292
let op = SendTo :: new ( fd, buffer, addr. clone ( ) ) ;
@@ -271,6 +302,34 @@ impl Socket {
271
302
let op = SendToVectored :: new ( fd, buffer, addr. clone ( ) ) ;
272
303
compio_runtime:: submit ( op) . await . into_inner ( )
273
304
}
305
+
306
+ pub async fn send_msg < T : IoBuf , C : IoBuf > (
307
+ & self ,
308
+ buffer : T ,
309
+ control : C ,
310
+ addr : & SockAddr ,
311
+ ) -> BufResult < usize , ( T , C ) > {
312
+ let fd = self . to_shared_fd ( ) ;
313
+ let op = SendMsg :: new ( fd, MsgBuf :: new ( buffer, control) , addr. clone ( ) ) ;
314
+ compio_runtime:: submit ( op)
315
+ . await
316
+ . into_inner ( )
317
+ . map_buffer ( MsgBuf :: into_tuple)
318
+ }
319
+
320
+ pub async fn send_msg_vectored < T : IoVectoredBuf , C : IoBuf > (
321
+ & self ,
322
+ buffer : T ,
323
+ control : C ,
324
+ addr : & SockAddr ,
325
+ ) -> BufResult < usize , ( T , C ) > {
326
+ let fd = self . to_shared_fd ( ) ;
327
+ let op = SendMsgVectored :: new ( fd, MsgBuf :: new ( buffer, control) , addr. clone ( ) ) ;
328
+ compio_runtime:: submit ( op)
329
+ . await
330
+ . into_inner ( )
331
+ . map_buffer ( MsgBuf :: into_tuple)
332
+ }
274
333
}
275
334
276
335
impl_raw_fd ! ( Socket , Socket2 , socket, socket) ;
0 commit comments