From owner-freebsd-hackers@FreeBSD.ORG Mon Feb 9 15:14:18 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id CA38A16A4CE for ; Mon, 9 Feb 2004 15:14:18 -0800 (PST) Received: from starbug.ugh.net.au (starbug.ugh.net.au [203.31.238.37]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9139643D1D for ; Mon, 9 Feb 2004 15:14:18 -0800 (PST) (envelope-from andrew@ugh.net.au) Received: from localhost (localhost [127.0.0.1]) by starbug.ugh.net.au (Postfix) with ESMTP id 65D09A828 for ; Tue, 10 Feb 2004 10:14:16 +1100 (EST) Date: Tue, 10 Feb 2004 10:14:16 +1100 (EST) From: Andrew To: freebsd-hackers@freebsd.org Message-ID: <20040210100257.G56192-100000@starbug.ugh.net.au> X-WonK: *wibble* MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Mailman-Approved-At: Tue, 10 Feb 2004 05:30:04 -0800 Subject: select, sendto and ENOBUFS X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Feb 2004 23:14:18 -0000 Hi, I have a problem with sendto returning an error and setting errno to ENOBUFS however I am calling select first to make sure the fd is writeable (see below for code). s is a raw socket and the data I'm sending is 1492 bytes. I haven't changed the low water mark for the socket. This looks like a bug however the bug may well be mine... Does anyone have any ideas? Thanks, Andrew do { printf("waiting on socket\n"); FD_ZERO(&fdset); FD_SET(s, &fdset); if (select(s + 1, NULL, &fdset, NULL, NULL) == -1) { warn("select"); return 0; } } while (! FD_ISSET(s, &fdset)); printf("socket ready\n"); if (se$ndto(s, (void *)ip_packet, ip_packet->ip_len, 0, (struct sockaddr *)&sa, sizeof(sa)) == -1) { if (errno == ENOBUFS) { warn("sleeping 1 second - sendto"); sleep(1); } else { warn("sendto"); } return 0; }