Sheldon, I had big trouble with the NetServices API code too. My problems were not the same as yours, and I was using TCP, but it is just possible you may be interested in my outcome.
I believe that the mbed platform situation is this:
The TCP/UDP protocol stack is LwIP. This is widely used, tough, and fit for purpose. It is very reliable. This sits on top of the mbed ethernet driver for the MAC and PHY. Luckily, this is also fast and reliable.
the let-down is the API-layer. This reduces the speed to a fraction of the system's capability, it has every kind of compatibility problem, and it is unreliable.
What to do? well, I simply turned to LwIP, and used the API layer for that. Here it is for UDP:
http://lwip.wikia.com/wiki/Raw/UDP
Here is the code that started me on the LwIP path, using TCP:
http://mbed.org/users/no2chem/programs/EthernetTester/6095m/docs/
see how the TCP API is used to generate an HTTP interface.
this code is old now, and has some library contentions. you need to copy "device.h" locally, and rename it.
But, I have found it to be very reliable over a long period of testing. I looked at LPCXpresso for this, too, after seeing the mess things are in. But LPCX does not have anything other than some rough testing code, last time I looked - unless the FreeRTOS version has now been properly developed (and you can cope with an RTOS!).
Naturally, I can't guarantee that this will solve your UDP problems, but it may be worth exploring.
My application requires to receive large UDP packets with payload of 900+ bytes. I'm using NetServices API. I discovered that I'm able to receive packets up to about 650 bytes, but anything larger is just lost somewhere in the labyrinth of HW and APIs. I use UDPSocket class and what I experience is that it's event handler method is not invoked on large packets.
I've made tests with different payload sizes and I found a strange behaviour. When I send a 750 bytes packet I receive the first one. Then I send another 750 bytes packet and I don't receive that one. But if I send smaller packets after that I receive all the smaller ones. So I'm able to receive only one packet of size 750. After a restart I can receive one more 750 bytes packet again (but not anything larger than that).
Does anyone know what could be the problem? - is it a hardware limitation? - is it a bug in the underlying APIs? - it it a bug in my application (I doubt that, as I sucessfully receive smaller packets) - is it a parameter of one of the API I should override?