Function nc::accept4

source ·
pub unsafe fn accept4(
    sockfd: i32,
    addr: &mut sockaddr_in_t,
    addrlen: &mut socklen_t,
    flags: i32
) -> Result<(), Errno>
Expand description

Accept a connection on a socket.

Examples found in repository?
examples/socket.rs (lines 38-43)
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
fn main() -> Result<(), Errno> {
    let listen_fd = unsafe { nc::socket(nc::AF_INET, nc::SOCK_STREAM, 0)? };

    let addr = nc::sockaddr_in_t {
        sin_family: nc::AF_INET as nc::sa_family_t,
        sin_port: htons(80),
        sin_addr: nc::in_addr_t {
            s_addr: nc::INADDR_ANY as u32,
        },
        ..Default::default()
    };

    unsafe {
        let addr_alias = transmute::<&nc::sockaddr_in_t, &nc::sockaddr_t>(&addr);
        let ret = nc::bind(listen_fd, addr_alias, size_of::<nc::sockaddr_in_t>() as u32);
        assert_eq!(ret, Err(nc::EACCES));
        return Ok(());

        nc::listen(listen_fd, nc::SOCK_STREAM)?;
    }

    let mut conn_addr = nc::sockaddr_in_t::default();
    let mut conn_addr_len: nc::socklen_t = 0;
    let conn_fd = unsafe {
        nc::accept4(
            listen_fd,
            &mut conn_addr,
            &mut conn_addr_len,
            nc::SOCK_CLOEXEC,
        )?
    };
    println!("conn_fd: {:?}", conn_fd);

    Ok(())
}