- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 TcpStream
.我正在使用的基本结构是:
loop {
if /* new data in the stream */ { /* handle it */ }
/* do a lot of other stuff */
}
所以 set_timeout()
似乎是我需要的,但我对它的工作原理有点困惑。文档说:
This function will set a timeout for all blocking operations (including reads and writes) on this stream. The timeout specified is a relative time, in milliseconds, into the future after which point operations will time out. This means that the timeout must be reset periodically to keep it from expiring.
所以我希望每次检查新数据是否可用之前都必须重置超时,否则一段时间后我只会有 Err(TimeOut)
。
但情况似乎并非如此:实际上,如果我一劳永逸地设置一个非常低的超时(如 10 毫秒),循环就会完全按照我的要求进行。如果有则返回新数据,如果没有则返回Err(TimeOut)
。
我是否误解了文档?使用这种行为对我来说安全吗?
最佳答案
我原以为它会像套接字超时一样工作,就像大多数操作系统中的套接字属性一样,并且可以通过带有 SO_TIMEOUT 或类似东西的编程语言获得。有了这样的套接字超时,每当您在套接字上启动阻塞操作(如读取、写入、连接)时,计时器就会启动。要么操作将在时间范围内成功,要么定时器将被触发并且操作因超时而失败。超时是套接字的属性而不是操作的属性,因此无需在每次操作前再次设置。
但是根据文档,Rust 实现了一个完全不同的东西。如果我正确地解释了文档,他们不会为每个操作设置超时,而是为套接字上的所有此类操作设置截止日期。也就是说,当计时器设置为 10 秒时,您可以在这段时间内进行多次读取,但如果 10 秒后仍有读取事件,它将停止。
当使用其他语言处理套接字超时时,这种行为不是预期的行为,看起来 Rust 开发人员对此(实验性)API 有类似的反对意见。在 https://github.com/rust-lang/rust/issues/15802他们建议将这些函数从 set..timeout
重命名为 set..deadline
以使名称反射(reflect)行为。
关于tcp - set_timeout() 在 TcpStream 上究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26560774/
我正在使用 TcpStream .我正在使用的基本结构是: loop { if /* new data in the stream */ { /* handle it */ } /*
我正在尝试使用(如标题所示) 设置超时插件中sublime text 3的功能。 据我了解,在许多情况下需要使用 lambda 函数。所以我尝试了这个简单的测试: class SetTimeoutTe
我是一名优秀的程序员,十分优秀!