From 6c6dff0e184ec56d6de4d174e65a3c900e52fea7 Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Sun, 9 Apr 2017 19:55:47 -0500 Subject: [PATCH] Use timers when connecting and disconnecting, so failures don't result in long hangs. --- tcpconnection.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tcpconnection.c b/tcpconnection.c index 2f6351a..e1be2cd 100644 --- a/tcpconnection.c +++ b/tcpconnection.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "atipmapping.h" #include "session.h" @@ -17,6 +18,7 @@ BOOLEAN StartTCPConnection(Session *sess) { Word tcperr; ASPOpenSessionRec *commandRec; srBuff mySRBuff; + LongWord initialTime; commandRec = (ASPOpenSessionRec *)sess->spCommandRec; @@ -56,10 +58,11 @@ BOOLEAN StartTCPConnection(Session *sess) { return FALSE; } + initialTime = GetTick(); do { TCPIPPoll(); TCPIPStatusTCP(sess->ipid, &mySRBuff); - } while (mySRBuff.srState == TCPSSYNSENT); + } while (mySRBuff.srState == TCPSSYNSENT && GetTick()-initialTime < 15*60); if (mySRBuff.srState != TCPSESTABLISHED) { TCPIPAbortTCP(sess->ipid); TCPIPLogout(sess->ipid); @@ -73,14 +76,17 @@ BOOLEAN StartTCPConnection(Session *sess) { void EndTCPConnection(Session *sess) { srBuff mySRBuff; + LongWord initialTime; if (sess->tcpLoggedIn) { + initialTime = GetTick(); do { TCPIPPoll(); } while (TCPIPStatusTCP(sess->ipid, &mySRBuff) == tcperrOK && !toolerror() && mySRBuff.srState == TCPSESTABLISHED - && mySRBuff.srSndQueued > 0); + && mySRBuff.srSndQueued > 0 + && GetTick()-initialTime < 15*60); TCPIPAbortTCP(sess->ipid); TCPIPLogout(sess->ipid);