Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S269121AbUJQNft (ORCPT ); Sun, 17 Oct 2004 09:35:49 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S269127AbUJQNft (ORCPT ); Sun, 17 Oct 2004 09:35:49 -0400 Received: from gate.in-addr.de ([212.8.193.158]:46025 "EHLO mx.in-addr.de") by vger.kernel.org with ESMTP id S269121AbUJQNfq (ORCPT ); Sun, 17 Oct 2004 09:35:46 -0400 Date: Sun, 17 Oct 2004 15:35:37 +0200 From: Lars Marowsky-Bree To: David Schwartz , "Linux-Kernel@Vger. Kernel. Org" Subject: Re: UDP recvmsg blocks after select(), 2.6 bug? Message-ID: <20041017133537.GL7468@marowsky-bree.de> References: <20041016062512.GA17971@mark.mielke.cc> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Ctuhulu: HASTUR User-Agent: Mutt/1.5.6i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1611 Lines: 41 On 2004-10-16T17:28:24, David Schwartz wrote: > The kernel elects to drop the packet on the call to 'recvmsg'. This is its > right -- it can drop a UDP packet at any time. POSIX is careful not to imply > that 'select' guarantees future behavior because this is not possible in > principle. I'm sorry, but according to my reading of POSIX and the Austin spec, this is exactly what select() returning 'ready to read' implies. The SuV spec is actually quite detailed about the options here: A descriptor shall be considered ready for reading when a call to an input function with O_NONBLOCK clear would not block, whether or not the function would transfer data successfully. (The function might return data, an end-of-file indication, or an error other than one indicating that it is blocked, and in each of these cases the descriptor shall be considered ready for reading.) This actually forbids recvmsg() to return EAGAIN and EWOULDBLOCK as has been suggested. EIO seems to be the best fit. But I'd have to agree that blocking on recvmsg() after select() has indicated ready to read does violate the specification, unless the socket has actually been opened with O_NONBLOCK. Sincerely, Lars Marowsky-Br?e -- High Availability & Clustering SUSE Labs, Research and Development SUSE LINUX AG - A Novell company - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/