diff -r 8ee6909f1320 -r 32db080a2a70 jdk/src/share/classes/java/net/Inet6Address.java --- a/jdk/src/share/classes/java/net/Inet6Address.java Tue Apr 30 10:48:25 2013 +0200 +++ b/jdk/src/share/classes/java/net/Inet6Address.java Mon Apr 29 23:07:22 2013 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -203,6 +203,12 @@ */ private transient NetworkInterface scope_ifname; // null + /** + * set if the object is constructed with a scoped + * interface instead of a numeric scope id. + */ + private boolean scope_ifname_set; // false; + private static final long serialVersionUID = 6880410070516793377L; // Perform native initialization @@ -332,7 +338,7 @@ } } - private void initif(String hostName, byte addr[],NetworkInterface nif) + private void initif(String hostName, byte addr[], NetworkInterface nif) throws UnknownHostException { holder().hostName = hostName; @@ -344,6 +350,7 @@ scope_ifname = nif; scope_id = deriveNumericScope(nif); scope_id_set = true; + scope_ifname_set = true; // for consistency } } @@ -431,6 +438,7 @@ try { scope_ifname = NetworkInterface.getByName(ifname); if (scope_ifname != null) { + scope_ifname_set = true; try { scope_id = deriveNumericScope(scope_ifname); } catch (UnknownHostException e) { @@ -438,6 +446,12 @@ // the machine being used for deserialization has // the same interface name but without IPv6 configured. } + } else { + /* the interface does not exist on this system, so we clear + * the scope information completely */ + scope_id_set = false; + scope_ifname_set = false; + scope_id = 0; } } catch (SocketException e) {} @@ -784,8 +798,10 @@ private synchronized void writeObject(java.io.ObjectOutputStream s) throws IOException { - if (scope_ifname != null) + if (scope_ifname != null) { ifname = scope_ifname.getName(); + scope_ifname_set = true; + } s.defaultWriteObject(); } }