According to the function call udp_sendmsg() in the source file
net/ipv4/udp.c (Linux Kernel 2.6.17.11), when an error value is returned
from the function ip_append_data() due to local device congestion, say
interface queue overflow, pending packets in the queue sk->sk_write_queue
are simply flushed (udp_flush_pending_frames() is invoked) without caching
for future retransmission.
I called a network API function sendto() to transmit UDP packets in a
blocking I/O mode at a rate of 100Mbps over the 802.11b wireless ad hoc
network, the network was overloaded as the maximum transfer rate for 802.11b
was just 11Mbps. Therefore, the outgoing interface queue must be full and
UDP packets will be dropped eventually. However, I checked that there was no
packet loss at the receiver side, i.e. the number of packets sent from the
sender is equal to that received.
It seems that the implementation (at code level) does not match with the
actual behaviour. I would like to seek expertise on clarifying my
understanding in UDP implementation so that this phenomenon can be
explained.
Thank you.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html