Plink's front-end select loop was failing to send error messages to

winnet.c. The result was that complete failures to make an SSH
connection (connection refused, for example) were causing a hang
instead of a proper error report.

[originally from svn r1539]
This commit is contained in:
Simon Tatham 2002-01-10 13:06:26 +00:00
Родитель d237773599
Коммит 290e08ae76
1 изменённых файлов: 17 добавлений и 12 удалений

29
plink.c
Просмотреть файл

@ -679,21 +679,26 @@ int main(int argc, char **argv)
socket = sklist[i]; socket = sklist[i];
wp = (WPARAM) socket; wp = (WPARAM) socket;
if (!WSAEnumNetworkEvents(socket, NULL, &things)) { if (!WSAEnumNetworkEvents(socket, NULL, &things)) {
static const struct { int bit, mask; } eventtypes[] = {
{FD_CONNECT_BIT, FD_CONNECT},
{FD_READ_BIT, FD_READ},
{FD_CLOSE_BIT, FD_CLOSE},
{FD_OOB_BIT, FD_OOB},
{FD_WRITE_BIT, FD_WRITE},
{FD_ACCEPT_BIT, FD_ACCEPT},
};
int e;
noise_ultralight(socket); noise_ultralight(socket);
noise_ultralight(things.lNetworkEvents); noise_ultralight(things.lNetworkEvents);
if (things.lNetworkEvents & FD_CONNECT)
connopen &= select_result(wp, (LPARAM) FD_CONNECT);
if (things.lNetworkEvents & FD_READ)
connopen &= select_result(wp, (LPARAM) FD_READ);
if (things.lNetworkEvents & FD_CLOSE)
connopen &= select_result(wp, (LPARAM) FD_CLOSE);
if (things.lNetworkEvents & FD_OOB)
connopen &= select_result(wp, (LPARAM) FD_OOB);
if (things.lNetworkEvents & FD_WRITE)
connopen &= select_result(wp, (LPARAM) FD_WRITE);
if (things.lNetworkEvents & FD_ACCEPT)
connopen &= select_result(wp, (LPARAM) FD_ACCEPT);
for (e = 0; e < lenof(eventtypes); e++)
if (things.lNetworkEvents & eventtypes[e].mask) {
LPARAM lp;
int err = things.iErrorCode[eventtypes[e].bit];
lp = WSAMAKESELECTREPLY(eventtypes[e].mask, err);
connopen &= select_result(wp, lp);
}
} }
} }
} else if (n == 1) { } else if (n == 1) {