Revert "Cygwin: select: workaround FD_WRITE network event handling"

This reverts commit dedbbd74d0.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2023-08-26 17:59:58 +02:00
parent 384e572f41
commit a841911ea4
2 changed files with 3 additions and 28 deletions

View File

@ -645,7 +645,6 @@ LoadDLLfunc (getsockname, ws2_32)
LoadDLLfunc (getsockopt, ws2_32)
LoadDLLfunc (ioctlsocket, ws2_32)
LoadDLLfunc (listen, ws2_32)
LoadDLLfunc_pfx_only (select, ws2_32)
LoadDLLfunc (setsockopt, ws2_32)
LoadDLLfunc (shutdown, ws2_32)
LoadDLLfunc (socket, ws2_32)

View File

@ -1757,15 +1757,6 @@ fhandler_base::select_except (select_stuff *ss)
return s;
}
struct wfd_set
{
u_int fd_count;
SOCKET fd_array[1];
};
/* autoload exposes the Winsock select function only with a _win32_ prefix. */
extern "C" int _win32_select(int, wfd_set *, wfd_set *, wfd_set *, TIMEVAL *);
static int
peek_socket (select_record *me, bool)
{
@ -1781,24 +1772,9 @@ peek_socket (select_record *me, bool)
if (me->read_selected)
me->read_ready |= ret || !!(events & (FD_READ | FD_ACCEPT | FD_CLOSE));
if (me->write_selected)
{
/* The FD_WRITE event is a false friend. It indicates ready to write
even if the next send fails with WSAEWOULDBLOCK. *After* the fact,
FD_WRITE will be cleared until sending is again possible.
For the time being, workaround that here by using the WinSock
select function. It indicates writability correctly. */
if (events & FD_WRITE)
{
wfd_set w = { 1, { fh->get_socket () } };
TIMEVAL t = { 0 };
if (_win32_select (0, NULL, &w, NULL, &t) == 0)
events &= ~FD_WRITE;
}
/* Don't check for FD_CLOSE here. Only an error case (ret == -1)
will set ready for writing. */
me->write_ready |= ret || !!(events & (FD_WRITE | FD_CONNECT));
}
/* Don't check for FD_CLOSE here. Only an error case (ret == -1)
will set ready for writing. */
me->write_ready |= ret || !!(events & (FD_WRITE | FD_CONNECT));
if (me->except_selected)
me->except_ready |= !!(events & FD_OOB);