Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T03:00:16.149Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

listener.rs

46 lines · 1.2 KB · rust
1use std::{
2    io::Result,
3    os::windows::io::{AsSocket, BorrowedSocket},
4    path::Path,
5};
6
7use windows::Win32::Networking::WinSock::{SOCKADDR_UN, SOMAXCONN, bind, listen};
8
9use crate::{
10    socket::UnixSocket,
11    stream::UnixStream,
12    util::{init, map_ret, sockaddr_un},
13};
14
15pub struct UnixListener(UnixSocket);
16
17impl UnixListener {
18    pub fn bind<P: AsRef<Path>>(path: P) -> Result<Self> {
19        init();
20        let socket = UnixSocket::new()?;
21        let (addr, len) = sockaddr_un(path)?;
22        unsafe {
23            map_ret(bind(
24                socket.as_raw(),
25                &addr as *const _ as *const _,
26                len as i32,
27            ))?;
28            map_ret(listen(socket.as_raw(), SOMAXCONN as _))?;
29        }
30        Ok(Self(socket))
31    }
32
33    pub fn accept(&self) -> Result<(UnixStream, ())> {
34        let mut storage = SOCKADDR_UN::default();
35        let mut len = std::mem::size_of_val(&storage) as i32;
36        let raw = self.0.accept(&mut storage as *mut _ as *mut _, &mut len)?;
37        Ok((UnixStream::new(raw), ()))
38    }
39}
40
41impl AsSocket for UnixListener {
42    fn as_socket(&self) -> BorrowedSocket<'_> {
43        unsafe { BorrowedSocket::borrow_raw(self.0.as_raw().0 as _) }
44    }
45}
46
Served at tenant.openagents/omega Member data and write actions are omitted.