--- a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Tue Mar 06 10:25:45 2012 +0800
+++ b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Tue Mar 06 20:34:38 2012 +0000
@@ -509,8 +509,15 @@
int rem = (pos <= lim ? lim - pos : 0);
boolean preferIPv6 = (family != StandardProtocolFamily.INET);
- int written = send0(preferIPv6, fd, ((DirectBuffer)bb).address() + pos,
+ int written;
+ try {
+ written = send0(preferIPv6, fd, ((DirectBuffer)bb).address() + pos,
rem, target);
+ } catch (PortUnreachableException pue) {
+ if (isConnected())
+ throw pue;
+ written = rem;
+ }
if (written > 0)
bb.position(pos + written);
return written;