@@ -653,10 +653,6 @@ w32_select(int fds, w32_fd_set* readfds, w32_fd_set* writefds, w32_fd_set* excep
653
653
if (writefds && FD_ISSET (i , writefds )) {
654
654
in_set_fds ++ ;
655
655
if (w32_io_is_io_available (fd_table .w32_ios [i ], FALSE)) {
656
- /* for connect() completed sockets finish WSA connect process*/
657
- if ((fd_table .w32_ios [i ]-> type == SOCK_FD )
658
- && ((fd_table .w32_ios [i ]-> internal .state == SOCK_CONNECTING )))
659
- socketio_finish_connect (fd_table .w32_ios [i ]);
660
656
FD_SET (i , & write_ready_fds );
661
657
out_ready_fds ++ ;
662
658
}
@@ -676,9 +672,23 @@ w32_select(int fds, w32_fd_set* readfds, w32_fd_set* writefds, w32_fd_set* excep
676
672
677
673
if (writefds )
678
674
for (i = 0 ; i < fds ; i ++ )
679
- if (FD_ISSET (i , writefds ) && (!FD_ISSET (i , & write_ready_fds )))
680
- FD_CLR (i , writefds );
681
-
675
+ if (FD_ISSET (i , writefds )) {
676
+ if (FD_ISSET (i , & write_ready_fds )) {
677
+ /* for connect() completed sockets finish WSA connect process*/
678
+ if ((fd_table .w32_ios [i ]-> type == SOCK_FD )
679
+ && ((fd_table .w32_ios [i ]-> internal .state == SOCK_CONNECTING )))
680
+ if (socketio_finish_connect (fd_table .w32_ios [i ]) != 0 ) {
681
+ /* finalizeing connect failed - recored error */
682
+ /* error gets picked up later recv and/or send*/
683
+ fd_table .w32_ios [i ]-> read_details .error = errno ;
684
+ fd_table .w32_ios [i ]-> write_details .error = errno ;
685
+ fd_table .w32_ios [i ]-> internal .state = SOCK_CONNECTED ;
686
+ errno = 0 ;
687
+ }
688
+ }
689
+ else
690
+ FD_CLR (i , writefds );
691
+ }
682
692
683
693
debug3 ("select - returning %d" , out_ready_fds );
684
694
return out_ready_fds ;
0 commit comments