File tree 1 file changed +15
-5
lines changed
crates/shadowsocks/src/net/sys/windows
1 file changed +15
-5
lines changed Original file line number Diff line number Diff line change @@ -283,7 +283,9 @@ impl AsyncWrite for TcpStream {
283
283
TcpStreamState :: FastOpenConnecting ( ref mut overlapped) => {
284
284
let stream = inner. get_mut ( ) ;
285
285
286
- let n = ready ! ( stream. poll_write_io( cx, || {
286
+ ready ! ( stream. poll_write_ready( cx) ) ?;
287
+
288
+ let write_result = stream. try_write_io ( || {
287
289
unsafe {
288
290
let sock = stream. as_raw_socket ( ) as SOCKET ;
289
291
@@ -320,11 +322,19 @@ impl AsyncWrite for TcpStream {
320
322
Err ( io:: Error :: from_raw_os_error ( err) )
321
323
}
322
324
}
323
- } ) ) ? ;
325
+ } ) ;
324
326
325
- // Connect successfully with fast open
326
- * state = TcpStreamState :: Connected ;
327
- return Ok ( n) . into ( ) ;
327
+ match write_result {
328
+ Ok ( n) => {
329
+ // Connect successfully with fast open
330
+ * state = TcpStreamState :: Connected ;
331
+ return Ok ( n) . into ( ) ;
332
+ }
333
+ Err ( ref err) if err. kind ( ) == ErrorKind :: WouldBlock => {
334
+ // Wait again for writable event.
335
+ }
336
+ Err ( err) => return Err ( err) . into ( ) ,
337
+ }
328
338
}
329
339
}
330
340
}
You can’t perform that action at this time.
0 commit comments