@Override public void receive(Address sender, byte[] data, int offset, int length) { if (data == null || length <= 0) { // GEODE-1596 - check for empty messages return; } // drop message from self; it has already been looped back up // (https://issues.jboss.org/browse/JGRP-1765) if (local_physical_addr != null && local_physical_addr.equals(sender)) return; if (length - offset == 4 && data[offset] == 'p' && data[offset + 1] == 'i' && data[offset + 2] == 'n' && data[offset + 3] == 'g') { // AvailablePort check data[offset + 1] = 'o'; try { sendToSingleMember(sender, data, offset, length); } catch (Exception e) { log.fatal("Unable to respond to available-port check", e); } return; } super.receive(sender, data, offset, length); }
public void run() { final byte receive_buf[]=new byte[66000]; // to be on the safe side (IPv6 == 65575 bytes, IPv4 = 65535) final DatagramPacket packet=new DatagramPacket(receive_buf, receive_buf.length); while(thread != null && Thread.currentThread().equals(thread)) { try { // solves Android ISSUE #24748 - DatagramPacket truncated UDP in ICS if(is_android) packet.setLength(receive_buf.length); receiver_socket.receive(packet); int len=packet.getLength(); if(len > receive_buf.length && log.isErrorEnabled()) log.error(Util.getMessage("SizeOfTheReceivedPacket"), len, receive_buf.length, receive_buf.length); receive(new IpAddress(packet.getAddress(), packet.getPort()), receive_buf, packet.getOffset(), len); } catch(SocketException sock_ex) { if(receiver_socket.isClosed()) { log.debug("receiver socket is closed, exception=" + sock_ex); break; } log.error(Util.getMessage("FailedReceivingPacket"), sock_ex); } catch(Throwable ex) { log.error(Util.getMessage("FailedReceivingPacket"), ex); } } if(log.isDebugEnabled()) log.debug(name + " thread terminated"); }
@Override public void receive(Address sender, byte[] data, int offset, int length, boolean copy_buffer) { if(data == null) return; // drop message from self; it has already been looped back up (https://issues.jboss.org/browse/JGRP-1765) if(local_physical_addr != null && local_physical_addr.equals(sender)) return; if (length-offset == 4 && data[offset] == 'p' && data[offset+1] == 'i' && data[offset+2] == 'n' && data[offset+3] == 'g') { // AvailablePort check data[offset+1] = 'o'; try { sendToSingleMember(sender, data, offset, length); } catch (Exception e) { log.fatal("Unable to respond to available-port check", e); } return; } super.receive(sender, data, offset, length, copy_buffer); }
"Use the FRAG protocol and make its frag_size lower than " + receive_buf.length); receive(local_addr, sender, data, offset, len);
receive(mcast_addr, sender, data, offset, len);
public void run() { final byte receive_buf[]=new byte[66000]; // to be on the safe side (IPv6 == 65575 bytes, IPv4 = 65535) final DatagramPacket packet=new DatagramPacket(receive_buf, receive_buf.length); while(thread != null && Thread.currentThread().equals(thread)) { try { // solves Android ISSUE #24748 - DatagramPacket truncated UDP in ICS if(is_android) packet.setLength(receive_buf.length); receiver_socket.receive(packet); int len=packet.getLength(); if(len > receive_buf.length && log.isErrorEnabled()) log.error(Util.getMessage("SizeOfTheReceivedPacket"), len, receive_buf.length, receive_buf.length); receive(new IpAddress(packet.getAddress(), packet.getPort()), receive_buf, packet.getOffset(), len); } catch(SocketException sock_ex) { if(receiver_socket.isClosed()) { log.debug("receiver socket is closed, exception=" + sock_ex); break; } log.error(Util.getMessage("FailedReceivingPacket"), sock_ex); } catch(Throwable ex) { log.error(Util.getMessage("FailedReceivingPacket"), ex); } } if(log.isDebugEnabled()) log.debug(name + " thread terminated"); }