File tree Expand file tree Collapse file tree 2 files changed +17
-7
lines changed
shadowsocks-service/src/local/dns
shadowsocks/src/net/sys/windows Expand file tree Collapse file tree 2 files changed +17
-7
lines changed Original file line number Diff line number Diff line change @@ -193,10 +193,10 @@ impl DnsClient {
193193 fn check_peekable < F : std:: os:: windows:: io:: AsRawSocket > ( s : & mut F ) -> bool {
194194 use winapi:: {
195195 ctypes:: { c_char, c_int} ,
196- um:: winsock2:: { recv, MSG_PEEK } ,
196+ um:: winsock2:: { recv, MSG_PEEK , SOCKET } ,
197197 } ;
198198
199- let sock = s. as_raw_socket ( ) ;
199+ let sock = s. as_raw_socket ( ) as SOCKET ;
200200
201201 unsafe {
202202 let mut peek_buf = [ 0u8 ; 1 ] ;
Original file line number Diff line number Diff line change @@ -283,7 +283,9 @@ impl AsyncWrite for TcpStream {
283283 TcpStreamState :: FastOpenConnecting ( ref mut overlapped) => {
284284 let stream = inner. get_mut ( ) ;
285285
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 ( || {
287289 unsafe {
288290 let sock = stream. as_raw_socket ( ) as SOCKET ;
289291
@@ -320,11 +322,19 @@ impl AsyncWrite for TcpStream {
320322 Err ( io:: Error :: from_raw_os_error ( err) )
321323 }
322324 }
323- } ) ) ? ;
325+ } ) ;
324326
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+ }
328338 }
329339 }
330340 }
You can’t perform that action at this time.
0 commit comments