mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
Fix unexpected network error 5000
[originally from svn r286]
This commit is contained in:
parent
edf8b22b98
commit
b51c18f24c
17
raw.c
17
raw.c
@ -150,14 +150,22 @@ static int raw_msg (WPARAM wParam, LPARAM lParam) {
|
||||
int ret;
|
||||
char buf[256];
|
||||
|
||||
if (s == INVALID_SOCKET) /* how the hell did we get here?! */
|
||||
return -5000;
|
||||
/*
|
||||
* Because reading less than the whole of the available pending
|
||||
* data can generate an FD_READ event, we need to allow for the
|
||||
* possibility that FD_READ may arrive with FD_CLOSE already in
|
||||
* the queue; so it's possible that we can get here even with s
|
||||
* invalid. If so, we return 1 and don't worry about it.
|
||||
*/
|
||||
if (s == INVALID_SOCKET)
|
||||
return 1;
|
||||
|
||||
if (WSAGETSELECTERROR(lParam) != 0)
|
||||
return -WSAGETSELECTERROR(lParam);
|
||||
|
||||
switch (WSAGETSELECTEVENT(lParam)) {
|
||||
case FD_READ:
|
||||
case FD_CLOSE:
|
||||
ret = recv(s, buf, sizeof(buf), 0);
|
||||
if (ret < 0 && WSAGetLastError() == WSAEWOULDBLOCK)
|
||||
return 1;
|
||||
@ -165,7 +173,7 @@ static int raw_msg (WPARAM wParam, LPARAM lParam) {
|
||||
return -10000-WSAGetLastError();
|
||||
if (ret == 0) {
|
||||
s = INVALID_SOCKET;
|
||||
return 0; /* can't happen, in theory */
|
||||
return 0;
|
||||
}
|
||||
c_write( buf, ret );
|
||||
return 1;
|
||||
@ -184,9 +192,6 @@ static int raw_msg (WPARAM wParam, LPARAM lParam) {
|
||||
if (outbuf_head != outbuf_reap)
|
||||
try_write();
|
||||
return 1;
|
||||
case FD_CLOSE:
|
||||
s = INVALID_SOCKET;
|
||||
return 0;
|
||||
}
|
||||
return 1; /* shouldn't happen, but WTF */
|
||||
}
|
||||
|
18
ssh.c
18
ssh.c
@ -772,14 +772,22 @@ static int ssh_msg (WPARAM wParam, LPARAM lParam) {
|
||||
int ret;
|
||||
char buf[256];
|
||||
|
||||
if (s == INVALID_SOCKET) /* how the hell did we get here?! */
|
||||
return -5000;
|
||||
/*
|
||||
* Because reading less than the whole of the available pending
|
||||
* data can generate an FD_READ event, we need to allow for the
|
||||
* possibility that FD_READ may arrive with FD_CLOSE already in
|
||||
* the queue; so it's possible that we can get here even with s
|
||||
* invalid. If so, we return 1 and don't worry about it.
|
||||
*/
|
||||
if (s == INVALID_SOCKET)
|
||||
return 1;
|
||||
|
||||
if (WSAGETSELECTERROR(lParam) != 0)
|
||||
return -WSAGETSELECTERROR(lParam);
|
||||
|
||||
switch (WSAGETSELECTEVENT(lParam)) {
|
||||
case FD_READ:
|
||||
case FD_CLOSE:
|
||||
ret = recv(s, buf, sizeof(buf), 0);
|
||||
if (ret < 0 && WSAGetLastError() == WSAEWOULDBLOCK)
|
||||
return 1;
|
||||
@ -787,14 +795,10 @@ static int ssh_msg (WPARAM wParam, LPARAM lParam) {
|
||||
return -10000-WSAGetLastError();
|
||||
if (ret == 0) {
|
||||
s = INVALID_SOCKET;
|
||||
return 0; /* can't happen, in theory */
|
||||
return 0;
|
||||
}
|
||||
ssh_gotdata (buf, ret);
|
||||
return 1;
|
||||
case FD_CLOSE:
|
||||
s = INVALID_SOCKET;
|
||||
ssh_state = SSH_STATE_CLOSED;
|
||||
return 0;
|
||||
}
|
||||
return 1; /* shouldn't happen, but WTF */
|
||||
}
|
||||
|
17
telnet.c
17
telnet.c
@ -586,14 +586,22 @@ static int telnet_msg (WPARAM wParam, LPARAM lParam) {
|
||||
int ret;
|
||||
char buf[256];
|
||||
|
||||
if (s == INVALID_SOCKET) /* how the hell did we get here?! */
|
||||
return -5000;
|
||||
/*
|
||||
* Because reading less than the whole of the available pending
|
||||
* data can generate an FD_READ event, we need to allow for the
|
||||
* possibility that FD_READ may arrive with FD_CLOSE already in
|
||||
* the queue; so it's possible that we can get here even with s
|
||||
* invalid. If so, we return 1 and don't worry about it.
|
||||
*/
|
||||
if (s == INVALID_SOCKET)
|
||||
return 1;
|
||||
|
||||
if (WSAGETSELECTERROR(lParam) != 0)
|
||||
return -WSAGETSELECTERROR(lParam);
|
||||
|
||||
switch (WSAGETSELECTEVENT(lParam)) {
|
||||
case FD_READ:
|
||||
case FD_CLOSE:
|
||||
ret = recv(s, buf, sizeof(buf), 0);
|
||||
if (ret < 0 && WSAGetLastError() == WSAEWOULDBLOCK)
|
||||
return 1;
|
||||
@ -601,7 +609,7 @@ static int telnet_msg (WPARAM wParam, LPARAM lParam) {
|
||||
return -10000-WSAGetLastError();
|
||||
if (ret == 0) {
|
||||
s = INVALID_SOCKET;
|
||||
return 0; /* can't happen, in theory */
|
||||
return 0;
|
||||
}
|
||||
#if 0
|
||||
if (in_synch) {
|
||||
@ -632,9 +640,6 @@ static int telnet_msg (WPARAM wParam, LPARAM lParam) {
|
||||
if (outbuf_head != outbuf_reap)
|
||||
try_write();
|
||||
return 1;
|
||||
case FD_CLOSE:
|
||||
s = INVALID_SOCKET;
|
||||
return 0;
|
||||
}
|
||||
return 1; /* shouldn't happen, but WTF */
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user