UDP sendto() returning ENOBUFS - "No buffer space available"
hiren panchasara
hiren.panchasara at gmail.com
Wed Jul 16 08:58:22 UTC 2014
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
More information about the freebsd-net
mailing list