Skip to content

Commit f33bb99

Browse files
committed
fix connecting sock to finalize before reporting write enabled
1 parent bf74d01 commit f33bb99

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

contrib/win32/win32compat/w32fd.c

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -653,10 +653,6 @@ w32_select(int fds, w32_fd_set* readfds, w32_fd_set* writefds, w32_fd_set* excep
653653
if (writefds && FD_ISSET(i, writefds)) {
654654
in_set_fds++;
655655
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]);
660656
FD_SET(i, &write_ready_fds);
661657
out_ready_fds++;
662658
}
@@ -676,9 +672,23 @@ w32_select(int fds, w32_fd_set* readfds, w32_fd_set* writefds, w32_fd_set* excep
676672

677673
if (writefds)
678674
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+
}
682692

683693
debug3("select - returning %d", out_ready_fds);
684694
return out_ready_fds;

serverloop.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,7 @@ collect_children(void)
868868
{
869869
s = session_get(&i);
870870

871-
if (s != NULL)
871+
if ((s != NULL) && (s->pid != 0))
872872
{
873873
if (WaitForSingleObject(s -> pid, 0) == 0)
874874
{

0 commit comments

Comments
 (0)