From owner-svn-src-user@FreeBSD.ORG Sat Mar 3 13:31:20 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DF91D1065673; Sat, 3 Mar 2012 13:31:20 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CB5448FC08; Sat, 3 Mar 2012 13:31:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q23DVKYl083927; Sat, 3 Mar 2012 13:31:20 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q23DVKQF083925; Sat, 3 Mar 2012 13:31:20 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201203031331.q23DVKQF083925@svn.freebsd.org> From: Andre Oppermann Date: Sat, 3 Mar 2012 13:31:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r232460 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Mar 2012 13:31:21 -0000 Author: andre Date: Sat Mar 3 13:31:20 2012 New Revision: 232460 URL: http://svn.freebsd.org/changeset/base/232460 Log: If the user has closed the socket then drop a persisting connection after a much reduced timeout. Typically web servers close their sockets quickly under the assumption that the TCP connections goes away as well. That is not entirely true however. If the peer closed the window we're going to wait for a long time with lots of data in the send buffer. Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Modified: user/andre/tcp_workqueue/sys/netinet/tcp_timer.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Sat Mar 3 13:02:28 2012 (r232459) +++ user/andre/tcp_workqueue/sys/netinet/tcp_timer.c Sat Mar 3 13:31:20 2012 (r232460) @@ -424,6 +424,16 @@ tcp_timer_persist(void *xtp) tp = tcp_drop(tp, ETIMEDOUT); goto out; } + /* + * If the user has closed the socket then drop a persisting + * connection after a much reduced timeout. + */ + if (tp->t_state > TCPS_CLOSE_WAIT && + (ticks - tp->t_rcvtime) >= TCPTV_PERSMAX) { + TCPSTAT_INC(tcps_persistdrop); + tp = tcp_drop(tp, ETIMEDOUT); + goto out; + } tcp_setpersist(tp); tp->t_flags |= TF_FORCEDATA; (void) tcp_output(tp);