[
https://issues.jboss.org/browse/JGRP-1880?page=com.atlassian.jira.plugin....
]
Bela Ban edited comment on JGRP-1880 at 9/25/14 8:36 AM:
---------------------------------------------------------
I found out that the DatagramSocket returned via {{DatagramChannel.socket()}} has a stupid
readLock / writeLock held when calling {{receive()}} or {{send()}} respectively. This
means that the unicast receiver in TP will block until unicast messages are received, but
this will also keep the _sender_ from sending any data !
Very stupid and breaking the semantics of {{DatagramSocket.send()}} which allows for
concurrent receiving and sending as there's no readLock or writeLock, but
synchronization is done on the DatagramPacket only.
I don't really want to use 2 separate unicast sockets now; one for receiving unicasts
and one for sending unicasts. More investigation needed...
was (Author: belaban):
I found out that the DatagramSocket returned via {{DatagramChannel.socket()}} has a stupid
readLock / writeLock held when calling {{receive()}} or {{send()}} respectively. This
means that the unicast receiver in TP will block until unicast messages are received, but
this will also keep the _sender_ from sending any data !
Very stupid and breaking the semantics of {{DatagramSocket.send()}} which allows for
concurrent receiving and sending as there's no readLock or writeLock, but
synchronization is done on the DatagramPacket only.
I don't really want to use 2 separate unicast sockets now; one for receiving unicasts
and one for sending unicasts. More investigate needed...
UDP.ip_ttl is ignored and is always 1
-------------------------------------
Key: JGRP-1880
URL:
https://issues.jboss.org/browse/JGRP-1880
Project: JGroups
Issue Type: Bug
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 3.6
Since we switched from using a {{MulticastSocket}} for sending of multicast packets to a
{{DatagramSocket}}, the time-to-live (TTL) of a packet is always {{1}}. The reason is that
method {{setTimeToLive()}} only exists in {{MulticastSocket}}, but not in
{{DatagramSocket}}.
We cannot revert the code and use a {{MulticastSocket}} to send multicasts, as this
won't reveal the real IP address of the sender, but only the multicast address, and
the real address is needed to drop packets at the _transport level_.
Investigate whether we could use reflection to get the {{DatagramSocketImpl}} and call
{{setTimeToLive()}}.
--
This message was sent by Atlassian JIRA
(v6.3.1#6329)