negotiation failed (Apple #5915)
- The IPP backend now retries Validate-Job requests (Issue #132)
- Reverted USB read limit enforcement change from CUPS 2.2.12 (Issue #72)
+- Added a workaround for Solaris in `httpAddrConnect2` (Issue #156)
- Now use a 60 second timeout for reading USB backchannel data (Issue #160)
- The USB backend now tries harder to find a serial number (Issue #170)
- Fixed `@IF(name)` handling in `cupsd.conf` (Apple #5918)
else if (FD_ISSET(fds[i], &error_set))
# endif /* HAVE_POLL */
{
+# ifdef __sun
+ // Solaris incorrectly returns errors when you poll() a socket that is
+ // still connecting. This check prevents us from removing the socket
+ // from the pool if the "error" is EINPROGRESS...
+ int sockerr; // Current error on socket
+ socklen_t socklen = sizeof(serr);
+ // Size of error variable
+
+ if (!getsockopt(fds[i], SOL_SOCKET, SO_ERROR, &sockerr, &socklen) && (!sockerr || sockerr == EINPROGRESS))
+ continue; // Not an error
+# endif // __sun
+
/*
* Error on socket, remove from the "pool"...
*/