X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=jbsockets.c;h=fef395abe0c050cbabc2ac15e41bd9806f35086b;hp=3c43c1777773965b66e29be44e95f2f5cc43f065;hb=788cbf28fbb00d5feea27a03e1363272fd864182;hpb=c374b4059fb38a0555f9eb7f6b15a42fc7045df1 diff --git a/jbsockets.c b/jbsockets.c index 3c43c177..fef395ab 100644 --- a/jbsockets.c +++ b/jbsockets.c @@ -1,4 +1,4 @@ -const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.143 2017/06/04 14:37:05 fabiankeil Exp $"; +const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.145 2017/06/08 13:04:56 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $ @@ -373,7 +373,26 @@ static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client poll_fd[0].fd = fd; poll_fd[0].events = POLLOUT; - if (poll(poll_fd, 1, 30000) > 0) + retval = poll(poll_fd, 1, 30000); + if (retval == 0) + { + if (rp->ai_next != NULL) + { + /* Log this now as we'll try another address next */ + log_error(LOG_LEVEL_CONNECT, + "Could not connect to [%s]:%s: Operation timed out.", + csp->http->host_ip_addr_str, service); + } + else + { + /* + * This is the last address, don't log this now + * as it would result in a duplicated log message. + */ + socket_error = ETIMEDOUT; + } + } + else if (retval > 0) #else /* wait for connection to complete */ FD_ZERO(&wfds); @@ -1359,10 +1378,18 @@ int accept_connection(struct client_state * csp, jb_socket fds[]) do { #if defined(FEATURE_ACCEPT_FILTER) && defined(SO_ACCEPTFILTER) - struct accept_filter_arg af_options; - bzero(&af_options, sizeof(af_options)); - strlcpy(af_options.af_name, "httpready", sizeof(af_options.af_name)); - setsockopt(fd, SOL_SOCKET, SO_ACCEPTFILTER, &af_options, sizeof(af_options)); + if (csp->config->enable_accept_filter) + { + struct accept_filter_arg af_options; + bzero(&af_options, sizeof(af_options)); + strlcpy(af_options.af_name, "httpready", sizeof(af_options.af_name)); + if (setsockopt(fd, SOL_SOCKET, SO_ACCEPTFILTER, &af_options, + sizeof(af_options))) + { + log_error(LOG_LEVEL_ERROR, + "Enabling accept filter for socket %d failed: %E", fd); + } + } #endif afd = accept (fd, (struct sockaddr *) &client, &c_length); } while (afd < 0 && errno == EINTR);