Typing boldly beyond my knowledge base...
Speaking in broad generalities and not necessarily linux-specific (or
even correct perhaps), when you call send(), that will call-into
socket code (in the kernel), which will call into UDP code, which will
call into IP code, which will call into the driver.
If the driver notices that the card does not have a full DMA queue -
and in this case, perhaps it will find the queue empty? - it will
start to "tell" the NIC about the packet. That may involve updating
various control sctructures on the card, and I suppose it is
conceivable that if the card is otherwise busy trying to deal with a
low signal strength issue, it may not respond to say a PIO read with
as good quickness. I'm not sure that such a card is especially "good"
but perhaps it is unavoidable.
Your application would be more or less "stuck" for that length of time.
I would have thought that PCI/whatever I/O bus timeouts would be
rather low there - but it would take more knowledge than I have and
perhap a bus analysis to see if that were the case.
I would have thought that if one went into ARP on the way down, and
found that there was not an IP->MAC mapping for the destination IP,
that the ARP request would be generated, and _that_ would be sent to
the driver, perhaps encountering delays as above, but if not, the
actual datagram being sent would be queued in ARP, and the "stack"
would unwind back to the caller, his datagram being sent once the ARP
reply arrived.
Or I could be entirely out to left-field.
rick jones
--
portable adj, code that compiles under more than one compiler
these opinions are mine, all mine; HP might not want them anyway...

feel free to post, OR email to raj in cup.hp.com but NOT BOTH...