# Nexus Membrane: Socket Shim # Manages state for fake file descriptors. import net_glue const MAX_SOCKETS = 1024 var socket_table: array[MAX_SOCKETS, ptr NexusSock] proc new_socket*(): int = ## Allocate a new NexusSocket and return a fake FD. ## Reserve FDs 0-99 for system/vfs. for i in 100 ..< MAX_SOCKETS: if socket_table[i] == nil: var s = create(NexusSock) s.fd = i s.state = CLOSED socket_table[i] = s return i return -1 proc get_socket*(fd: int): ptr NexusSock = if fd < 0 or fd >= MAX_SOCKETS: return nil return socket_table[fd] proc connect_flow*(fd: int, ip: uint32, port: uint16): int = let s = get_socket(fd) if s == nil: return -1 return glue_connect(s, cast[ptr IpAddr](addr ip), port) proc send_flow*(fd: int, buf: pointer, len: int): int = let s = get_socket(fd) if s == nil: return -1 return glue_write(s, buf, len) proc recv_flow*(fd: int, buf: pointer, len: int): int = let s = get_socket(fd) if s == nil: return -1 return glue_read(s, buf, len)