сделать - получить с одного и отправить на другой. И ловлю довольно таки странное поведение. Дело в том, что данные не доходят на конечный сокет. Но как только вырубаешь приложуху sigint'ом - вываливается чанк пакетов. Самое интересное, что socket.send() не лочится и цикл продолжает крутиться. Что я делаю не так ? Я лочу экзекьютор ? Если так, то где и как (токио) ? Пример:
loop {
let data = receive_sock.next().await;
if let Some(Ok((_, data))) = data {
send_sock.send((Instant::now(), data.clone())).await.unwrap();
}
}
Другая сторона читает пакеты, которые ты отправляешь? Если она не читает, то они просто копятся в буфере отправки, пока не придёт подтверждение предыдущих
Читает конечно.
В else ветку(которой нет) точно не попадаешь? Ошибки сокета, например
Как создаётся сокет? Конвертируется из std::net? На сокете из std нужно сделать set_nonblocking(true). tokio не делает это сам.
Попробуй воткнуть "пустой await" между receive и send Чтобы ивентлуп на следующую итерацию скакнул Не помню как это в токио делается
Обсуждают сегодня