mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-25 01:02:24 +00:00
Modify the FIXME into a calculated risk. I don't like this, but I
don't like the thought of having to try to fix it either, particularly when I can't tell whether it'll work or not without reproducing the (probably phantom) problem. Gah. I wish WinSock would give better documentation of possible error returns. [originally from svn r1260]
This commit is contained in:
parent
7bb4a9f5f0
commit
b9d9b4951f
34
winnet.c
34
winnet.c
@ -745,7 +745,6 @@ void try_send(Actual_Socket s)
|
||||
urgentflag = 0;
|
||||
bufchain_prefix(&s->output_data, &data, &len);
|
||||
}
|
||||
|
||||
nsent = send(s->s, data, len, urgentflag);
|
||||
noise_ultralight(nsent);
|
||||
if (nsent <= 0) {
|
||||
@ -765,17 +764,30 @@ void try_send(Actual_Socket s)
|
||||
} else if (nsent == 0 ||
|
||||
err == WSAECONNABORTED || err == WSAECONNRESET) {
|
||||
/*
|
||||
* FIXME. This will have to be done better when we
|
||||
* start managing multiple sockets (e.g. SSH port
|
||||
* forwarding), because if we get CONNRESET while
|
||||
* trying to write a particular forwarded socket
|
||||
* then it isn't necessarily the end of the world.
|
||||
* Ideally I'd like to pass the error code back to
|
||||
* somewhere the next select_result() will see it,
|
||||
* but that might be hard. Perhaps I should pass it
|
||||
* back to be queued in the Windows front end bit.
|
||||
* ASSUMPTION:
|
||||
*
|
||||
* I'm assuming here that if a TCP connection is
|
||||
* reset or aborted once established, we will be
|
||||
* notified by a select event rather than a
|
||||
* CONNABORTED or CONNRESET from send(). In other
|
||||
* words, I'm assuming CONNABORTED and CONNRESET
|
||||
* don't come back from a _nonblocking_ send(),
|
||||
* because the local side doesn't know they've
|
||||
* happened until it waits for a response to its
|
||||
* TCP segment - so the error will arrive
|
||||
* asynchronously.
|
||||
*
|
||||
* If I'm wrong, this will be a really nasty case,
|
||||
* because we can't necessarily call plug_closing()
|
||||
* without having to make half the SSH code
|
||||
* reentrant; so instead we'll have to schedule a
|
||||
* call to plug_closing() for some suitable future
|
||||
* time.
|
||||
*/
|
||||
fatalbox(winsock_error_string(err));
|
||||
fatalbox("SERIOUS NETWORK INTERNAL ERROR: %s\n"
|
||||
"Please report this immediately to "
|
||||
"<putty@projects.tartarus.org>.",
|
||||
winsock_error_string(err));
|
||||
} else {
|
||||
fatalbox(winsock_error_string(err));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user