Skip to content

Commit 65cdb23

Browse files
committed
Fix QNS?
1 parent 00a0557 commit 65cdb23

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

neqo-bin/src/client/mod.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -472,9 +472,9 @@ impl<'a, H: Handler> Runner<'a, H> {
472472
let mut send = false; // Should we send on the next loop interation?
473473
let mut maybe_gso_failed = false;
474474

475-
loop {
475+
'outer: loop {
476476
if (send || exit) && !batch_data.is_empty() {
477-
let meta = batch_meta.take().unwrap();
477+
let meta = batch_meta.clone().unwrap();
478478
// Send all collected datagrams as GSO-sized chunks.
479479
for gso_chunk in batch_data.chunks(self.socket.max_gso_segments() * meta.len()) {
480480
// Optimistically attempt sending datagram. In case the OS
@@ -492,9 +492,10 @@ impl<'a, H: Handler> Runner<'a, H> {
492492
if !maybe_gso_failed && self.socket.max_gso_segments() == 1 {
493493
// Retry this once.
494494
maybe_gso_failed = true;
495-
} else {
496-
return e;
495+
qdebug!("GSO failed, retrying without");
496+
continue 'outer;
497497
}
498+
return e;
498499
}
499500
}
500501
}
@@ -507,6 +508,7 @@ impl<'a, H: Handler> Runner<'a, H> {
507508
batch_meta = Some(next.into());
508509
} else {
509510
batch_data.clear();
511+
batch_meta = None;
510512
send = false;
511513
}
512514
}

neqo-bin/src/server/mod.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,9 @@ impl ServerRunner {
258258
let mut send = false; // Should we send on the next loop interation?
259259
let mut maybe_gso_failed = false;
260260

261-
loop {
261+
'outer: loop {
262262
if (send || exit) && !batch_data.is_empty() {
263-
let meta = batch_meta.take().unwrap();
263+
let meta = batch_meta.clone().unwrap();
264264
// Send all collected datagrams as GSO-sized chunks.
265265
let socket = Self::find_socket(sockets, meta.source());
266266
for gso_chunk in batch_data.chunks(socket.max_gso_segments() * meta.len()) {
@@ -279,9 +279,10 @@ impl ServerRunner {
279279
if !maybe_gso_failed && socket.max_gso_segments() == 1 {
280280
// Retry this once.
281281
maybe_gso_failed = true;
282-
} else {
283-
return e;
282+
qdebug!("GSO failed, retrying without");
283+
continue 'outer;
284284
}
285+
return e;
285286
}
286287
}
287288
}
@@ -294,6 +295,7 @@ impl ServerRunner {
294295
batch_meta = Some(next.into());
295296
} else {
296297
batch_data.clear();
298+
batch_meta = None;
297299
send = false;
298300
}
299301
}

0 commit comments

Comments
 (0)