The errno for "No buffer space available" reports resource shortage. In BSD (and consequently other operating systems' network stacks), the idea is to use mbufs for network memory. Since there is a finite supply of memory, if the reserve of network memory is used up (and the code isn't going to wait for more), ENOBUFS is returned as a temporary failure. This is almost the same as ENOMEM, the difference there being that ENOMEM refers to malloc-based or zone-allocated memory areas, and ENOBUFS only to memory for networking.