From owner-freebsd-fs@FreeBSD.ORG Fri Oct 14 19:11:27 2005 Return-Path: X-Original-To: fs@freebsd.org Delivered-To: freebsd-fs@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 483BC16A41F for ; Fri, 14 Oct 2005 19:11:27 +0000 (GMT) (envelope-from rick@snowhite.cis.uoguelph.ca) Received: from dargo.cs.uoguelph.ca (dargo.cs.uoguelph.ca [131.104.96.159]) by mx1.FreeBSD.org (Postfix) with ESMTP id ED71C43D45 for ; Fri, 14 Oct 2005 19:11:26 +0000 (GMT) (envelope-from rick@snowhite.cis.uoguelph.ca) Received: from snowhite.cis.uoguelph.ca (snowhite.cis.uoguelph.ca [131.104.48.1]) by dargo.cs.uoguelph.ca (8.13.1/8.13.1) with ESMTP id j9EJBPdQ017358 for ; Fri, 14 Oct 2005 15:11:25 -0400 Received: (from rick@localhost) by snowhite.cis.uoguelph.ca (8.9.3/8.9.3) id PAA25440 for fs@freebsd.org; Fri, 14 Oct 2005 15:12:48 -0400 (EDT) Date: Fri, 14 Oct 2005 15:12:48 -0400 (EDT) From: rick@snowhite.cis.uoguelph.ca Message-Id: <200510141912.PAA25440@snowhite.cis.uoguelph.ca> To: fs@freebsd.org X-Scanned-By: MIMEDefang 2.52 on 131.104.96.159 Cc: Subject: FreeBSD NFS server not responding to TCP SYN packets from Linux/SunOS clients X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Oct 2005 19:11:27 -0000 > Then what happens when the socket receive queue fills up? (Sorry if > this is obvious). Its been a long time since I went through the BSD TCP code, so if I get this wrong, hopefully someone will jump in and correct it. Here goes... When the socket receive queue is full, the server will throw away further data that it receives, instead of queuing it. At the client end, there is a send window (#byte of unacknowledged data that can be sent) and once it sends "send window" bytes of data that gets thrown away at the server, it will hit the "send window" limit and stop sending more data. The NFS client will block in sosend() until the server moves the send window (which won't happen until the nfsd threads take data out of the socket receive queue on the server). Hope I got that right? rick