diff --git a/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java b/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java
index f0fca0c91777c2483ed639b9620138188978a6bb..265f9a31932ea7b0e361c8eab2a56e406a9d3a59 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java
@@ -11,6 +11,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import net.i2p.router.RouterContext;
 import net.i2p.router.transport.TransportUtil;
 import net.i2p.util.Log;
+import net.i2p.util.SystemVersion;
 
 /**
  * Coordinate the low-level datagram socket, creating and managing the UDPSender and
@@ -27,6 +28,8 @@ class UDPEndpoint implements SocketListener {
     private final InetAddress _bindAddress;
     private final boolean _isIPv4, _isIPv6;
     private static final AtomicInteger _counter = new AtomicInteger();
+
+    private static final int MIN_SOCKET_BUFFER = 256*1024;
     
     /**
      *  @param transport may be null for unit testing ONLY
@@ -124,6 +127,12 @@ class UDPEndpoint implements SocketListener {
                      socket = new DatagramSocket(port);
                  else
                      socket = new DatagramSocket(port, _bindAddress);
+                 if (!SystemVersion.isAndroid()) {
+                     if (socket.getSendBufferSize() < MIN_SOCKET_BUFFER)
+                         socket.setSendBufferSize(MIN_SOCKET_BUFFER);
+                     if (socket.getReceiveBufferSize() < MIN_SOCKET_BUFFER)
+                         socket.setReceiveBufferSize(MIN_SOCKET_BUFFER);
+                 }
                  break;
              } catch (SocketException se) {
                  if (_log.shouldLog(Log.WARN))