I don't see anything obvious in your code... One thing you may try is to decrease the uIP stack poll timer timeout - this has the side effect of making the entire stack "more responsive" (or run at a faster rate). I don't have the WiShield source in front of me right now but if you look in stack.c you will see where the poll timer timeout is set; the default value is "(1 second) / 2" - I have found that changing the divisor to 5 or 10 (and if you are brave you can go higher) is safe and causes the stack to be more snappy.
Again, this is all from memory and may or may not work for you - but its something to try... And here is a blatant plug for the user contrib stack

In the user contrib stack the poll timeout divisor has been exposed in apps-conf.h for easier one stop shopping (as have some other common user settings).
I'll also caution you about using UDP. In my experience UDP works fine for a short amount of time (8 - 10 hours ???) but then falls over and becomes unresponsive. I have had some luck working around this by occasionally reseting the stack (in my motion detector / kid catcher project) however this was not satisfactory for my RGB LED kitchen lighting project - which I switched to TCP sockets and it has been flawless...
Anyway, some food for thought and I hope that it helps!
Greg