Date: Wed, 16 Jul 2014 01:58:21 -0700 From: hiren panchasara <hiren.panchasara@gmail.com> To: "freebsd-net@freebsd.org" <net@freebsd.org> Subject: UDP sendto() returning ENOBUFS - "No buffer space available" Message-ID: <CALCpEUE7OtbXjVTk2C8%2BV7fjOKutuNq04BTo0SN42YEgX81k-Q@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
Return values in sendto() manpage says:
[ENOBUFS] The system was unable to allocate an internal buffer.
The operation may succeed when buffers become avail-
able.
[ENOBUFS] The output queue for a network interface was full.
This generally indicates that the interface has
stopped sending, but may be caused by transient con-
gestion.
If I hit the first condition, it should reflect as failures in
"netstat -m". Is that a correct assumption?
I want to understand what happens when/if we hit the second condition.
And how to prevent that from happening.
Is it just application's job to rate-limit data it sends to the n/w
interface card so that it doesn't saturate?
Does kernel do any sort of queuing in the case of ENOBUFS? OR does the
message just gets dropped?
For an application sending a lot of UDP data and returning ENOBUFS,
what all udp and other tunables I should tweak? I can only think of:
- number of tx ring descriptors - increasing this will get us more txds.
- kern.ipc.maxsockbuf: Increasing this will increase buffer size
allocated for sockets.
what else?
Any comments/suggestions/corrections?
cheers,
Hiren
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALCpEUE7OtbXjVTk2C8%2BV7fjOKutuNq04BTo0SN42YEgX81k-Q>
