-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.92 2011/03/27 13:57:41 fabiankeil Exp $";
+const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.97 2011/03/27 14:04:10 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
do
{
+ /*
+ * XXX: The whole errno overloading is ridiculous and should
+ * be replaced with something sane and thread safe
+ */
+ /* errno = 0;*/
#ifdef HAVE_RFC2553
fd = rfc2553_connect_to(host, portnum, csp);
#else
fd = no_rfc2553_connect_to(host, portnum, csp);
#endif
- if ((fd != JB_INVALID_SOCKET) || (errno != EINVAL))
+ if ((fd != JB_INVALID_SOCKET) || (errno == EINVAL)
+ || ((csp->fwd->forward_host == NULL) && (csp->fwd->type == SOCKS_NONE)))
{
break;
}
int retval;
jb_socket fd;
fd_set wfds;
- struct timeval tv[1];
+ struct timeval timeout;
#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
int flags;
#endif
int connect_failed;
- int socket_error;
+ /*
+ * XXX: Initializeing it here is only necessary
+ * because not all situations are properly
+ * covered yet.
+ */
+ int socket_error = 0;
#ifdef FEATURE_ACL
struct access_control_addr dst[1];
csp->http->host_ip_addr_str = malloc(NI_MAXHOST);
if (NULL == csp->http->host_ip_addr_str)
{
+ freeaddrinfo(result);
log_error(LOG_LEVEL_ERROR,
"Out of memory while getting the server IP address.");
return JB_INVALID_SOCKET;
FD_ZERO(&wfds);
FD_SET(fd, &wfds);
- tv->tv_sec = 30;
- tv->tv_usec = 0;
+ memset(&timeout, 0, sizeof(timeout));
+ timeout.tv_sec = 30;
/* MS Windows uses int, not SOCKET, for the 1st arg of select(). Wierd! */
- if ((select((int)fd + 1, NULL, &wfds, NULL, tv) > 0)
+ if ((select((int)fd + 1, NULL, &wfds, NULL, &timeout) > 0)
&& FD_ISSET(fd, &wfds))
{
socklen_t optlen = sizeof(socket_error);