std::old_io::net::udp::UdpSocket已替换为std::net::UdpSocket,fn set_timeout(&mut self, timeout_ms: Option<u64>)
没有等效内容。
任何想法如何实现?
答案 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语言完成的。如果你愿意的话,我可以稍后(可能在几个小时内)扩展它。