@@ -10,9 +10,9 @@ use compio_driver::op::CreateSocket;
1010use compio_driver:: {
1111 AsRawFd , ToSharedFd , impl_raw_fd,
1212 op:: {
13- Accept , BufResultExt , CloseSocket , Connect , Recv , RecvFrom , RecvFromVectored , RecvManaged ,
14- RecvMsg , RecvResultExt , RecvVectored , ResultTakeBuffer , Send , SendMsg , SendTo ,
15- SendToVectored , SendVectored , ShutdownSocket , VecBufResultExt ,
13+ Accept , BufResultExt , CloseSocket , Connect , Recv , RecvFrom , RecvFromManaged ,
14+ RecvFromVectored , RecvManaged , RecvMsg , RecvResultExt , RecvVectored , ResultTakeBuffer ,
15+ Send , SendMsg , SendTo , SendToVectored , SendVectored , ShutdownSocket , VecBufResultExt ,
1616 } ,
1717 syscall,
1818} ;
@@ -177,6 +177,21 @@ impl Socket {
177177 . take_buffer ( buffer_pool)
178178 }
179179
180+ pub async fn recv_from_managed < ' a > (
181+ & self ,
182+ buffer_pool : & ' a BufferPool ,
183+ len : usize ,
184+ flags : i32 ,
185+ ) -> io:: Result < ( BorrowedBuffer < ' a > , SockAddr ) > {
186+ let fd = self . to_shared_fd ( ) ;
187+ let buffer_pool = buffer_pool. try_inner ( ) ?;
188+ let op = RecvFromManaged :: new ( fd, buffer_pool, len, flags) ?;
189+ compio_runtime:: submit ( op)
190+ . with_extra ( )
191+ . await
192+ . take_buffer ( buffer_pool)
193+ }
194+
180195 pub async fn send < T : IoBuf > ( & self , buffer : T , flags : i32 ) -> BufResult < usize , T > {
181196 let fd = self . to_shared_fd ( ) ;
182197 let op = Send :: new ( fd, buffer, flags) ;
0 commit comments