Code Review Request: 7084030 DatagramSocket.getLocalAddress inconsistent on XP/2003 when IPv6 enabled and socket is connected

Chris Hegarty chris.hegarty at oracle.com
Mon Sep 26 02:45:01 PDT 2011


Looks great. Thanks Kurchi.

-Chris.

On 23/09/2011 21:13, Kurchi Hazra wrote:
> Hi,
>
>      The DatagramSocket.getLocalAddress() method was returning a
> wildcard address when a DatagramSocket is created and then connected to
> a remote address, on windows XP/Server 2003 machines with IPv6 enabled.
> However, for adhering to the spec as well as being consistent across all
> platforms, it is desirable for DatagramSocket.getLocalAddress() to
> return the local address that it is bound to on being connected. The
> cause of the problem was incorrect handling of the file descriptors
> representing the two stacks of IPv4 and IPv6 in Windows XP/Server 2003
> specific native code.
>      In order to fix this, a new native method socketLocalAddress() has
> been introduced in
> src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c which
> takes care of handling the file descriptors correctly when the
> DatagramSocket in question is connected to a remote address. The method
> accepts the family of the address to which it is connected (IPv4 or
> IPv6) and picks up the localAddress information from the concerned file
> descriptor (fd for IPv4 and fd1 for IPv6).
> src/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java has
> been modified accordingly to call the socketLocalAddress() instead of
> socketGetOption() when the option passed to DatagramSocket.getOption()
> is SocketOptions.SO_BINDADDR as in the case of
> DatagramSocket.getLocalAddress().
>
> The fix involves updates in:
> src/share/classes/java/net/AbstractPlainDatagramSocket
> src/windows/classes/java/net/TwoStacksPlainDatagramSocketImpl.java
> src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
>
> Webrev: http://cr.openjdk.java.net/~chegar/7084030/webrev.00/
>
>
> Thanks,
> Kurchi



More information about the net-dev mailing list