diff -urN ipmitool-1.8.11/lib/ipmi_sol.c ipmitool-saneretry/lib/ipmi_sol.c
--- ipmitool-1.8.11/lib/ipmi_sol.c	2009-02-25 15:38:52.000000000 -0500
+++ ipmitool-saneretry/lib/ipmi_sol.c	2009-03-11 14:20:03.000000000 -0400
@@ -71,8 +71,6 @@
 #define SOL_PARAMETER_SOL_PAYLOAD_CHANNEL       0x07
 #define SOL_PARAMETER_SOL_PAYLOAD_PORT          0x08
 
-#define MAX_SOL_RETRY           		6
-
 const struct valstr sol_parameter_vals[] = {
 	{ SOL_PARAMETER_SET_IN_PROGRESS,           "Set In Progress (0)" },
 	{ SOL_PARAMETER_SOL_ENABLE,                "Enable (1)" },
@@ -92,7 +90,6 @@
 static int            _in_raw_mode = 0;
 static int            _disable_keepalive = 0;
 static int            _use_sol_for_keepalive = 0;
-static int            _keepalive_retries = 0;
 
 extern int verbose;
 
@@ -1507,12 +1504,6 @@
 
 	if (end.tv_sec - _start_keepalive.tv_sec > SOL_KEEPALIVE_TIMEOUT) {
 	   ret = intf->keepalive(intf);
-	   if ( (ret!=0) && (_keepalive_retries < SOL_KEEPALIVE_RETRIES) ) {
-         ret = 0;
-         _keepalive_retries++;
-	   }
-	   else if ((ret==0) && (_keepalive_retries > 0))
-         _keepalive_retries = 0;
 		gettimeofday(&_start_keepalive, 0);
    }
 	return ret;
@@ -1520,6 +1511,8 @@
 
 
 
+
+
 /*
  * ipmi_sol_red_pill
  */
@@ -1535,7 +1528,6 @@
 	int    retval;
 	int    buffer_size = intf->session->sol_data.max_inbound_payload_size;
 	int    keepAliveRet = 0;
-	int    retrySol = 0;
 
 	buffer = (char*)malloc(buffer_size);
 	if (buffer == NULL) {
@@ -1555,40 +1547,20 @@
 		FD_SET(intf->fd, &read_fds);
 
 		/* Send periodic keepalive packet */
-		if(_use_sol_for_keepalive == 0)
-		{
-			keepAliveRet = ipmi_sol_keepalive_using_getdeviceid(intf);
-		}
-		else
-		{
-			keepAliveRet = ipmi_sol_keepalive_using_sol(intf);
-		}
+      if(_use_sol_for_keepalive == 0)
+      {
+         keepAliveRet = ipmi_sol_keepalive_using_getdeviceid(intf);
+      }
+      else
+      {
+         keepAliveRet = ipmi_sol_keepalive_using_sol(intf);
+      }
 		
 		if (keepAliveRet != 0)
 		{
-			/*
-			 * Retrying the keep Alive before declaring a communication
-			 * lost state with the IPMC. Helpful when the payload is 
-			 * reset and brings down the connection temporarily. Otherwise,
-			 * if we send getDevice Id to check the status of IPMC during
-			 * this down time when the connection is restarting, SOL will 
-			 * exit even though the IPMC is available and the session is open.
-			 */
-			if (retrySol == MAX_SOL_RETRY)
-			{
-				/* no response to Get Device ID keepalive message */
-				bShouldExit = 1;
-				continue;
-			}
-			else 
-			{ 
-				retrySol++;         
-			}
-		}
-		else
-		{
-			/* if the keep Alive is successful reset retries to zero */
-			retrySol = 0;
+			/* no response to keepalive message */
+			bShouldExit = 1;
+			continue;
 		}
 
 		/* Wait up to half a second */
