gpt4 book ai didi

sockets - 如何为 std::net::UdpSocket 设置超时?

转载 作者:行者123 更新时间:2023-11-29 08:04:14 24 4
gpt4 key购买 nike

std::old_io::net::udp::UdpSocket已替换为 std::net::UdpSocket , 和 fn set_timeout(&mut self, timeout_ms: Option<u64>)没有等价物。

有什么想法可以实现吗?

最佳答案

目前无法在 std::net 中为任何网络操作设置超时。上面有一个 RFC,所以对于 Rust 1.0,它肯定会被修复。敬请期待!

与此同时,您可以使用每个套接字都有的 AsRawFd 实现,并在文件描述符上手动调用低级套接字函数。 AsRawFd::as_raw_fd() 返回代表操作系统底层套接字的原始文件描述符。您可以在此文件描述符上调用各种低级套接字函数,例如 setsockopt。这些功能可通过 libc crate 使用。您可以在 libstd 源中找到它是如何完成的,例如 here 。您可能还想使用 crates.io 中的 libc - 内置的位于功能门之后,因此在测试版中不可用。

为了设置发送/读取超时,您需要使用 SO_SNDTIMEO/SO_RCVTIMEO 选项调用 setsockopt,提供指向 timeval 的指针实例。这基本上就是如何在 C 中完成的。如果你愿意,我可以稍后(可能在几个小时内)对此进行扩展。

关于sockets - 如何为 std::net::UdpSocket 设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com