-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.129 2014/10/18 11:27:43 fabiankeil Exp $";
+const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.134 2015/11/06 13:37:35 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
* OS-independent. Contains #ifdefs to make this work
* on many platforms.
*
- * Copyright : Written by and Copyright (C) 2001-2014 the
+ * Copyright : Written by and Copyright (C) 2001-2016 the
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
static jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct client_state *csp);
#endif
+/*********************************************************************
+ *
+ * Function : set_no_delay_flag
+ *
+ * Description : Disables TCP coalescence for the given socket.
+ *
+ * Parameters :
+ * 1 : fd = The file descriptor to operate on
+ *
+ * Returns : void
+ *
+ *********************************************************************/
+static void set_no_delay_flag(int fd)
+{
+#ifdef TCP_NODELAY
+ int mi = 1;
+
+ if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &mi, sizeof(int)))
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "Failed to disable TCP coalescence for socket %d", fd);
+ }
+#else
+#warning set_no_delay_flag() is a nop due to lack of TCP_NODELAY
+#endif /* def TCP_NODELAY */
+}
+
/*********************************************************************
*
* Function : connect_to
"Server socket number too high to use select(): %d >= %d",
fd, FD_SETSIZE);
close_socket(fd);
+ freeaddrinfo(result);
return JB_INVALID_SOCKET;
}
#endif
mark_socket_for_close_on_execute(fd);
#endif
-#ifdef TCP_NODELAY
- { /* turn off TCP coalescence */
- int mi = 1;
- setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *) &mi, sizeof (int));
- }
-#endif /* def TCP_NODELAY */
+ set_no_delay_flag(fd);
#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
if ((flags = fcntl(fd, F_GETFL, 0)) != -1)
}
#endif
-#ifdef TCP_NODELAY
- { /* turn off TCP coalescence */
- int mi = 1;
- setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *) &mi, sizeof (int));
- }
-#endif /* def TCP_NODELAY */
+ set_no_delay_flag(fd);
#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
if ((flags = fcntl(fd, F_GETFL, 0)) != -1)
struct linger linger_options;
linger_options.l_onoff = 1;
linger_options.l_linger = 5;
- if (0 != setsockopt(fd, SOL_SOCKET, SO_LINGER, &linger_options, sizeof(linger_options)))
+ if (0 != setsockopt(afd, SOL_SOCKET, SO_LINGER, &linger_options, sizeof(linger_options)))
{
log_error(LOG_LEVEL_ERROR, "Setting SO_LINGER on socket %d failed.", afd);
}
mark_socket_for_close_on_execute(afd);
#endif
+ set_no_delay_flag(afd);
+
csp->cfd = afd;
#ifdef HAVE_RFC2553
csp->ip_addr_str = malloc_or_die(NI_MAXHOST);