1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-25 09:12:24 +00:00

When polling MacTCP connections, check the connection state and if the far

end has sent a FIN pass that up to the plug.
TODO: handle less graceful connection closures.

[originally from svn r2544]
This commit is contained in:
Ben Harris 2003-01-11 17:31:59 +00:00
parent 3aec19fa72
commit cd79a89c11

View File

@ -142,6 +142,19 @@ enum { uppAddrToStrProcInfo = kCStackBased
/* End of AddressXlation.h bits */
/* TCP connection states, mysteriously missing from <MacTCP.h> */
#define TCPS_CLOSED 0
#define TCPS_LISTEN 2
#define TCPS_SYN_RECEIVED 4
#define TCPS_SYN_SENT 6
#define TCPS_ESTABLISHED 8
#define TCPS_FIN_WAIT_1 10
#define TCPS_FIN_WAIT_2 12
#define TCPS_CLOSE_WAIT 14
#define TCPS_CLOSING 16
#define TCPS_LAST_ACK 18
#define TCPS_TIME_WAIT 20
struct Socket_tag {
struct socket_function_table *fn;
/* the above variable absolutely *must* be the first in this structure */
@ -606,8 +619,12 @@ void mactcp_poll(void)
if (pb.csParam.status.amtUnreadData == 0)
break;
mactcp_recv(s, pb.csParam.status.amtUnreadData);
/* Should check connectionState in case remote has closed */
} while (TRUE);
switch (pb.csParam.status.connectionState) {
case TCPS_CLOSE_WAIT:
/* Remote end has sent us a FIN */
plug_closing(s->plug, NULL, 0, 0);
}
next_socket:
;
}