NET Phase2 实现 POC(非阻塞/io_wait + UDP + 超时/close-wakeup,v1.6.x)
English summary. Network Phase2 (spec A.17, v4.38): non-blocking APIs (
set_nonblock,accept_nb/connect_nb/send_nb/recv_nb, EAGAIN/E_INPROGRESS),sys_net_osfd+std.async io_wait, single-thread multi-connection async echo, UDP, socket timeouts and close-wakeup. VM-only loopback POC; no DNS/TLS/public network/AOT/Windows/ARM64; not production networking. See the English summaries index; the Chinese text below is authoritative.
状态:VM-only Linux x86-64 POC,非生产可用;无 DNS/TLS/公网;默认 loopback + opt-in。
Phase2 增量 API(bqvm VM builtin;AOT/Windows/ARM64 loud)
- 非阻塞:
sys_net_set_nonblock(fd,on);sys_net_accept_nb/connect_nb/send_nb/recv_nb(EAGAIN=-13、 connect E_INPROGRESS=-14);sys_net_osfd(fd)暴露 OS fd 供std.async io_wait(IO_READ/WRITE/ACCEPT/CONNECT)。 - 多连接 async(单线程事件循环):任务内使用 io_wait 等待 accept/read/write(fixture tcp_async_echo, 2 连接回环 echo,实测
ASYNC_ECHO_OK 2)。 - UDP:
sys_net_socket_udp/bind_udp(fd,port)/sendto(fd,port,buf,len)/recvfrom(fd,buf,len)/peer_port; loopback 单包 echo,实测UDP_ECHO_OK 4 112 105 110 103。 - 超时/close-wakeup:
sys_net_set_timeout(fd,ms)(SO_RCVTIMEO/SNDTIMEO;超时 -2 E_TIMEOUT); close 先 shutdown 再 close(唤醒阻塞 recv/send 近似);重复 close/use-after-close → E_INVALID(-4); 实测TIMEOUT_CLOSE_OK -2 0 -4 -4。 - std.net wrappers:
net_tcp_set_nonblock/osfd/wait/accept_nb/connect_nb/send_nb/recv_nb、net_udp_socket/bind/sendto/recvfrom/peer_port、net_tcp_set_timeout。
兼容/边界
- 阻塞模式仍默认(Phase1 兼容);true non-blocking 仅显式开启;
NET_SIMULATE默认 1 不变。 - fd 32、消息 ≤65535、仅 IPv4 字面量、无 DNS/TLS/公网;opt-in
QPLUS_NET_REAL=1; 非 loopback bind 需QPLUS_NET_ALLOW_NONLOOPBACK=1(否则 E_PERM)。 - AOT 对新 sys loud;Windows/ARM64 E_UNSUPPORTED(-8)。
- 残余(如实):事件循环为任务内 io_wait 轮询(非 epoll 常驻多路复用器);close-wakeup 依赖 shutdown 近似、 多线程 close 竞态未建模;无 UDP 超时/异步兼容层细化;无 DNS/TLS/公网;非生产可用。