使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算轻量化场景而设计。DragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for lightweight cloud computing scenarios.
Fix several issues that can cause TCP to get stuck on the accept state and fail to send a complete close (FIN) message.
Changes:
Change SocketHandleItem::wait_queue to Arc, so that the listening smoltcp socket in listening posix socket could share a common wait queue and won't lose its wake on accept.
Change the tcp socket close logic, remove the socket from socket set after poll ifce instead of before.
Todo:
The behavior removing socket immediatly after close it may be incorrect. The close operation actually just close the transmit half of the full-duplex connection, but still could recv from remote.
In the listening posix tcp socket TcpSocket , the handles list might have a problem. The socket behind each handle could time out and close before the accept function is called. This could cause a potential unresponsive issue.
Fix several issues that can cause TCP to get stuck on the accept state and fail to send a complete close (FIN) message.
Changes:
Todo: