io_uring_op_connect/
connect.rs1use core::pin::Pin;
4
5use crate::error::ConnectError;
6
7use io_uring_opcode::OpExtConnect;
8use io_uring_opcode::{OpCode, OpCompletion, OpError};
9use io_uring_owner::Owner;
10
11use ysockaddr::YSockAddrC;
12
13#[derive(Clone, Debug)]
15pub struct Connect {
16 owner: Owner,
18 fixed_fd: u32,
20 ysaddr: YSockAddrC,
21}
22
23impl Connect {
24 pub fn with_ysockaddr_c(fixed_fd: u32, ysaddr: YSockAddrC) -> Result<Self, ConnectError> {
26 Ok(Connect {
27 owner: Owner::Created,
28 fixed_fd,
29 ysaddr,
30 })
31 }
32}
33
34impl OpCompletion for Connect {
35 type Error = OpError;
36 fn entry(&self) -> io_uring::squeue::Entry {
37 let (saddr, slen) = self.ysaddr.as_c_sockaddr_len();
38
39 println!("OpCompletion entry() saddr = {:p}, slen = {}", saddr, slen);
40
41 io_uring::opcode::Connect::new(io_uring::types::Fixed(self.fixed_fd), saddr, slen).build()
42 }
43 fn owner(&self) -> Owner {
44 self.owner.clone()
45 }
46 fn force_owner_kernel(&mut self) -> bool {
47 self.owner = Owner::Kernel;
48 true
49 }
50}
51
52impl OpCode<Connect> for Connect {
53 fn submission(self) -> Result<Connect, OpError> {
54 Ok(self)
55 }
56 fn completion(&mut self, _: Pin<&mut Connect>) -> Result<(), OpError> {
57 todo!()
58 }
59}
60
61impl OpExtConnect for Connect {
62 fn fixed_fd(&self) -> u32 {
64 self.fixed_fd
65 }
66 fn ysaddr(&self) -> &YSockAddrC {
68 &self.ysaddr
69 }
70}