components/cups/patches/7187280.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 11 Mar 2013 10:38:09 -0700
branchs11-update
changeset 2520 ceec631e74d1
parent 2403 a4a5919f480b
permissions -rw-r--r--
Close of build 10.

--- cups/util.c	Mon Jan 19 23:26:36 1970
+++ cups/util.c	Mon Jan 19 23:26:36 1970
@@ -70,6 +70,9 @@
 #  include <unistd.h>
 #endif /* WIN32 || __EMX__ */
 
+#if defined(__sun)
+#include <inet/tcp.h>		/* need this for TCPS_ESTABLISHED ... */
+#endif
 
 /*
  * Local functions...
@@ -1659,6 +1662,38 @@
       cg->http = NULL;
     }
   }
+
+#if defined(__sun)
+ /*
+  * Check the connection state.
+  * If the connection wasn't used for some time, the server could close it.
+  * The socket state would change to CLOSE_WAIT in such case.
+  */
+  if (cg->http)
+  {
+    struct tcp_info tcpi;
+    socklen_t len = sizeof(tcpi);
+    memset(&tcpi, 0, sizeof(tcpi));
+
+   /*
+    * Get TCP connection info.
+    */
+    if (getsockopt(cg->http->fd, IPPROTO_TCP, TCP_INFO, &tcpi, &len) == 0)
+    {
+     /*
+      * Successfully got TCP connection state. Check it.
+      */
+      if (tcpi.tcpi_state != TCPS_ESTABLISHED)
+      {
+       /*
+        * Need to close the current connection.
+        */
+        httpClose(cg->http);
+        cg->http = NULL;
+      }
+    }
+  }
+#endif
 
  /*
   * (Re)connect as needed...