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