Я работаю с TcpStream
. Базовая структура Я работаю с это:Как точно работает set_timeout() на TcpStream?
loop {
if /* new data in the stream */ { /* handle it */ }
/* do a lot of other stuff */
}
Так set_timeout()
кажется, что мне нужно, но я немного озадачен о том, как это работает. В документации указано:
Эта функция устанавливает тайм-аут для всех операций блокировки (включая чтение и запись) в этом потоке. Указанный тайм-аут - это относительное время, в миллисекундах, в будущее, после которого тайм-ауты будут отключены. Это означает, что тайм-аут должен периодически перезагружаться, чтобы не допустить его истечения.
Таким образом, я ожидал, что каждый раз, когда вы будете проверять, доступны ли новые данные, я должен был бы сбросить таймаут, иначе у меня будет только Err(TimeOut)
через некоторое время.
Но, похоже, это не так: на самом деле, если я установил очень низкий тайм-аут (например, 10 мс) раз и навсегда, цикл делает именно то, что я хочу. Он возвращает новые данные, если они есть, и возвращает Err(TimeOut)
, если их нет.
Я не понимаю документацию? Безопасно ли мне использовать это поведение?
Таким образом, документация просто неверна, говоря, что ее необходимо периодически перезагружать, чтобы она не заканчивалась? – Levans
Документация раздражает, но похоже, что они не применяли тайм-ауты для одной операции, но сроки для группы операций. См. Отредактированный пост. –
Ну, если все будет переписано, я думаю, я подожду, чтобы посмотреть, что получится. – Levans