components/cups/patches/7187280.patch
author John Beck <John.Beck@Oracle.COM>
Fri, 21 Apr 2017 13:14:17 -0700
branchs11u3-sru
changeset 7934 2b9fc4cafd1f
parent 2403 a4a5919f480b
permissions -rw-r--r--
25933097 thunderbird/Makefile must drop library/desktop/gdk-pixbuf from REQUIRED_PACKAGES

--- 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...