如何设置std :: net :: UdpSocket的超时?

时间:2015-04-13 12:32:52

标签: sockets rust

std::old_io::net::udp::UdpSocket已替换为std::net::UdpSocketfn set_timeout(&mut self, timeout_ms: Option<u64>)没有等效内容。

任何想法如何实现?

1 个答案:

答案 0 :(得分:5)

现在无法在std::net中的任何网络操作上设置超时。有一个RFC,所以对于Rust 1.0它肯定会被修复。请继续关注!

与此同时,您可以使用每个套接字具有的AsRawFd实现,并手动调用文件描述符上的低级套接字函数。 AsRawFd::as_raw_fd()返回原始文件描述符,表示操作系统中的底层套接字。您可以在此文件描述符上调用各种低级套接字函数,如setsockopt。这些功能可通过libc包装箱获得。您可以在libstd来源中找到完成方式,例如here。您可能还想使用crates.io中的libc - 内置的一个位于功能门后面,因此无法在测试版中使用。

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