Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Feb 2004 11:11:27 -0800 (PST)
From:      Julian Elischer <julian@elischer.org>
To:        Andrew <andrew@ugh.net.au>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: select, sendto and ENOBUFS
Message-ID:  <Pine.BSF.4.21.0402101109290.82714-100000@InterJet.elischer.org>
In-Reply-To: <20040210100257.G56192-100000@starbug.ugh.net.au>

next in thread | previous in thread | raw e-mail | index | archive | help


On Tue, 10 Feb 2004, Andrew wrote:

> 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,


This is not a bug

select says "yes there is room inm the socket buffer"
however datagram protocols do not store anythign in the outgoing socket
buffer, but, instead hand the packets directly to the driver for the
NIC.

when the NIC fils up it returns ENOBUFS

this is your cue to do a usleep(1000)
before sending more packets.
> 
> 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;
> }
> 
> 
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0402101109290.82714-100000>