为什么Rust中没有TcpListener和UdpSocket的`shutdown`方法
根据该文件,TcpListener并UdpSocket会自动当值降至关闭/出斯克罗普的。但是为什么没有shutdown办法让我手动关闭它们?
https://doc.rust-lang.org/stable/std/net/struct.TcpListener.html
回答
您可以使用std::mem::drop提前删除值:
let listener = TcpListener::bind("127.0.0.1:80")?;
// ...
drop(listener);
// ...
没有shutdown方法,因为它不需要。现有的所有权系统已经足以跟踪套接字是否可用,并且无论如何您都无法对关闭的套接字做任何事情。
- 这不是为什么 TcpListenr 上没有关闭方法的原因,请参阅 iggy 的回答。
回答
你混淆了TcpListener和TcpStream。
TCP 套接字中的“关闭”具有技术意义。发送端的关闭将 FIN 传输到远程。接收端关闭意味着任何到达的数据段都将获得 RST 响应。这些定义仅适用于数据传输状态的 TCP 连接,不适用于侦听套接字。
THE END
二维码